Voltar ao catalogoSEC2-02
DeviceTokenController sem [Authorize] e mass assignment sobre entidade de dominio
CriticalAchado ConfirmadoSegurancaRodada 2
Evidencia
`DeviceTokenController.cs` linhas 27-35: `public async virtual Task<DeviceToken?> CreateAsync(DeviceToken input)` sem `[Authorize]`. Input inserido diretamente via `_deviceTokenRepository.InsertAsync(input)`.
Impacto Tecnico
Usuarios nao autenticados podem registrar tokens FCM para qualquer usuario/tenant. Notificacoes de aceite interceptadas.
Impacto de Negocio
Interceptacao de notificacoes push de operacoes criticas por concorrentes.
Recomendacao
Adicionar [Authorize]. Substituir por DTO com campo Token. Fixar TenantId/UserId a partir de CurrentTenant/CurrentUser.
Arquivos Afetados
aspnet-core/src/cargo_fleet.HttpApi/DeviceToken/DeviceTokenController.cs
Achados Relacionados
Acoes Relacionadas
{
"id": "SEC2-02",
"title": "DeviceTokenController sem [Authorize] e mass assignment sobre entidade de dominio",
"severity": "Critical",
"type": "achado confirmado",
"category": "security",
"description": "`POST /api/app/device-token` sem `[Authorize]` e aceita entidade `DeviceToken` como input direto, incluindo `TenantId` e `UserId` fornecidos pelo cliente sem validacao.",
"evidence": "`DeviceTokenController.cs` linhas 27-35: `public async virtual Task<DeviceToken?> CreateAsync(DeviceToken input)` sem `[Authorize]`. Input inserido diretamente via `_deviceTokenRepository.InsertAsync(input)`.",
"technicalImpact": "Usuarios nao autenticados podem registrar tokens FCM para qualquer usuario/tenant. Notificacoes de aceite interceptadas.",
"businessImpact": "Interceptacao de notificacoes push de operacoes criticas por concorrentes.",
"recommendation": "Adicionar `[Authorize]`. Substituir por DTO com campo `Token`. Fixar `TenantId`/`UserId` a partir de `CurrentTenant`/`CurrentUser`.",
"files": [
"aspnet-core/src/cargo_fleet.HttpApi/DeviceToken/DeviceTokenController.cs"
],
"pass": 2,
"relatedActions": [
"ACT-5.1.3"
],
"relatedFindings": [
"HIGH-01"
]
}
Descricao
POST /api/app/device-tokensem[Authorize]e aceita entidadeDeviceTokencomo input direto, incluindoTenantIdeUserIdfornecidos pelo cliente sem validacao.