From: Tulio A M Mendes Date: Thu, 11 Jun 2026 03:19:18 +0000 (-0300) Subject: docs: remove URGENT_SECURITY_STATUS_2026-06-09.md X-Git-Url: https://projects.tadryanom.me/?a=commitdiff_plain;h=c17cf07ad5497b1b5acc120cfa532454a55ddf72;p=AdrOS.git docs: remove URGENT_SECURITY_STATUS_2026-06-09.md All items from this TODO document have been completed: - H1: AIO validation (fd mode, read-only mount) - H3: SHM_RDONLY attach - H6: Fixed VAs removed (kva_alloc_pages) - H7: Tmpfs quotas + overflow hardening - M2: access() with real IDs - M6: Overlayfs wrapper lifetime - M8: CSPRNG (ChaCha20-based DRBG) - UID Infrastructure: /etc/passwd, auth, login, utmp/wtmp - L1: ENAMETOOLONG standardization - L2: getlogin/who/utmp Document is no longer needed as reference. --- diff --git a/docs/URGENT_SECURITY_STATUS_2026-06-09.md b/docs/URGENT_SECURITY_STATUS_2026-06-09.md deleted file mode 100644 index d9f3438c..00000000 --- a/docs/URGENT_SECURITY_STATUS_2026-06-09.md +++ /dev/null @@ -1,371 +0,0 @@ -# Urgent Security Status - 2026-06-09 - -## Objetivo - -Este documento substitui a checklist antiga de fases 2-5 como referência operacional do estado atual do AdrOS. - -A lista anterior ficou parcialmente desatualizada: vários itens já foram implementados, alguns ficaram parcialmente resolvidos e ainda restam gaps reais que merecem ataque prioritário. - -Este documento foi construído com base em verificação direta do código-fonte atual. - -## Resumo Executivo - -### Já implementado - -- SOCK_RAW privilege check -- rumpuser_free alignment handling -- VFS permission checks principais -- execve com verificação de bit executável -- O_NOFOLLOW retornando -ELOOP -- truncate/ftruncate sem fallback permissivo -- fb0_mmap respeitando prot e NX -- mkstemp com retry em colisão -- fcntl varargs em ulibc -- fcntl/openat varargs em newlib/libgloss -- scanf com suporte a field width -- grande parte da infraestrutura de UID/GID no kernel -- SHM com uid/gid/mode básicos e NX por default -- path_resolve_user/copy_user_cstr retornando ENAMETOOLONG em caminhos importantes - -### Parcialmente implementado - -- AIO validation -- /proc access control -- SHM permissions completas -- futex robusto -- tmpfs locking/quotas/overflow hardening -- overlayfs wrapper lifetime -- socket copy_to_user hardening -- POSIX access() estrito -- infraestrutura UID completa de userspace/sessão -- padronização total de ENAMETOOLONG - -### Ainda pendente de verdade - -- remover fixed VAs (KVA_PHYS_MAP / VIRTIO_VRING_VA) -- futex robusto com locking e shared keying correto -- /proc hardening completo -- AIO mode/mount validation completa -- tmpfs quotas e proteção explícita contra overflow no growth path -- CSPRNG real -- getlogin()/who/utmp reais -- revisão final dos copyouts de socket - -## Classificação Atual por Item - -## Fase 2 - Isolamento e Políticas de Segurança - -### H1: AIO fd Mode e Read-Only Mount Validation -Status: PARCIAL - -Evidência atual: -- `src/kernel/syscall.c`: `syscall_aio_rw_impl()` valida ponteiros, tamanho e usa bounce buffer. - -O que falta: -- rejeitar `aio_read` em fd `O_WRONLY` -- rejeitar `aio_write` em fd `O_RDONLY` -- rejeitar escrita em mount `MS_RDONLY` -- idealmente reutilizar a mesma política usada por `read/write/pread/pwrite` - -Prioridade recomendada: ALTA - -### H2: /proc Access Control -Status: PARCIAL - -Evidência atual: -- `src/kernel/procfs.c`: existe `proc_access_check(pid)` -- `/proc//status`, `/proc//maps`, `/proc//cmdline` usam esse check - -O que falta: -- proteger `/proc/dmesg` -- proteger `/proc/cmdline` -- implementar hidepid ou equivalente -- redigir endereços em `/proc//maps` para não-root -- revisar lifetime/snapshot dos dados lidos - -Prioridade recomendada: ALTA - -### H3: SHM Permissões Completas -Status: PARCIAL - -Evidência atual: -- `src/kernel/shm.c` contém `uid`, `gid`, `mode` -- `shm_perm_check()` já usa owner/group/other -- `IPC_STAT`, `IPC_SET`, `IPC_RMID` fazem checagens -- mapeamento aplica `VMM_FLAG_NX` - -O que falta: -- attach read-only no estilo `SHM_RDONLY` -- revisar completude da modelagem SysV/POSIX -- checar se faltam casos de permissão e compatibilidade fina - -Prioridade recomendada: MÉDIA - -### H4: SOCK_RAW Privilege Check -Status: IMPLEMENTADO - -Evidência atual: -- `src/kernel/socket.c`: `SOCK_RAW` exige `current_process->euid == 0` - -Prioridade recomendada: FECHADO - -### H5: Futex Robusto com Spinlock e Shared Memory Keying -Status: PARCIAL - -Evidência atual: -- `src/kernel/syscall.c`: waiters registram `addr`, `addr_space`, `proc` -- isso evita parte do aliasing entre address spaces diferentes - -O que falta: -- spinlock protegendo a tabela global -- chaveamento shared por backing físico ou inode+offset -- coordenação mais robusta entre wait/wake e scheduler -- revisão SMP da tabela e wakeup paths - -Prioridade recomendada: ALTA - -### H6: Remover Fixed VAs -Status: PENDENTE - -Evidência atual: -- `src/hal/x86/mm.c`: ainda usa `KVA_PHYS_MAP` -- `src/drivers/virtio_blk.c`: ainda usa `VIRTIO_VRING_VA 0xC0340000U` - -O que falta: -- alocador de VA kernel para MMIO / DMA / mapeamentos temporários -- remoção de VAs fixas locais -- revisão de colisões potenciais com outros dispositivos - -Prioridade recomendada: ALTA - -### H7: Tmpfs Locking, Quotas e Overflow Validation -Status: PARCIAL - -Evidência atual: -- `src/kernel/tmpfs.c`: existe `g_tmpfs_lock` -- várias operações usam spinlock - -O que falta: -- quota global -- validação explícita de overflow no crescimento de `new_cap *= 2` -- revisar metadados `uid/gid/mode` e consistência completa - -Prioridade recomendada: ALTA - -### H8: rumpuser_free Alignment Handling -Status: IMPLEMENTADO - -Evidência atual: -- `src/rump/rumpuser_adros.c`: aligned allocations guardam magic + raw pointer -- `rumpuser_free()` recupera o ponteiro bruto antes do `kfree` - -Prioridade recomendada: FECHADO - -## Fase 3 - Polimento de VFS e Userspace - -### M1: VFS Permissions / execve Bit Check -Status: IMPLEMENTADO - -Evidência atual: -- `src/kernel/fs.c`: `vfs_check_permission()` usa uid/gid/euid/egid -- `src/kernel/syscall.c`: `execve` verifica execute permission com `vfs_check_permission(node, 1)` - -Prioridade recomendada: FECHADO - -### M2: POSIX access() Completo -Status: PARCIAL - -Evidência atual: -- `src/kernel/syscall.c`: `F_OK/R_OK/W_OK/X_OK` já são tratados - -O que falta: -- usar uid/gid reais, não efetivos, para aderência POSIX estrita - -Prioridade recomendada: MÉDIA - -### M3: O_NOFOLLOW -ELOOP Return -Status: IMPLEMENTADO - -Evidência atual: -- `src/kernel/syscall.c`: final symlink com `O_NOFOLLOW` retorna `-ELOOP` - -Prioridade recomendada: FECHADO - -### M4: Truncate Fallback Remoção -Status: IMPLEMENTADO - -Evidência atual: -- `src/kernel/fs.c`: `vfs_truncate()` e `vfs_truncate_node()` retornam `-ENOSYS` sem backend - -Prioridade recomendada: FECHADO - -### M5: Socket copy_to_user Ignored Failures -Status: PARCIAL - -Evidência atual: -- `src/kernel/syscall.c`: vários caminhos de socket já verificam `copy_to_user` -- `recv`, `recvfrom`, `recvmsg`, `getsockname`, `getpeername`, `accept` foram endurecidos parcialmente - -Risco remanescente: -- alguns paths parecem usar condição invertida com `user_range_ok(...) == 0` antes do `copy_to_user` -- isso precisa revisão manual e correção pontual - -Prioridade recomendada: ALTA - -### M6: Overlayfs Wrapper Lifetime/Refcount -Status: PARCIAL - -Evidência atual: -- `src/kernel/overlayfs.c`: wrapper nodes têm `refcount` -- `overlay_wrap_close()` decrementa e libera - -O que falta: -- revisão de ownership/lifetime em todos os caminhos de uso -- confirmar ausência de wrappers órfãos ou double-free/UAF em cenários complexos - -Prioridade recomendada: MÉDIA - -### M7: fb0_mmap Respeitar prot e NX -Status: IMPLEMENTADO - -Evidência atual: -- `src/drivers/vbe.c`: rejeita `PROT_EXEC`, aplica `VMM_FLAG_NX`, respeita `prot` - -Prioridade recomendada: FECHADO - -### M8: CSPRNG Implementation -Status: PENDENTE - -Evidência atual: -- `src/kernel/devfs.c`: `/dev/random` e `/dev/urandom` usam PRNG simples, não criptográfico -- `src/kernel/kaslr.c`: usa xorshift32 seeded from TSC - -O que falta: -- fonte real de entropia -- CSPRNG central de kernel -- consumidores do sistema apontando para essa fonte - -Prioridade recomendada: ALTA - -### M9: mkstemp Retry Multiple Names -Status: IMPLEMENTADO - -Evidência atual: -- `user/ulibc/src/stdlib.c`: tenta até 100 vezes em caso de `EEXIST` - -Prioridade recomendada: FECHADO - -### M10: fcntl Varargs em ulibc -Status: IMPLEMENTADO - -Evidência atual: -- `user/ulibc/src/unistd.c`: vararg só é lido para comandos que precisam - -Prioridade recomendada: FECHADO - -### M11: newlib libgloss Varargs -Status: IMPLEMENTADO - -Evidência atual: -- `newlib/libgloss/adros/posix_stubs.c`: `fcntl` e `openat` já fazem leitura condicional - -Prioridade recomendada: FECHADO - -### M12: scanf Field Width e Buffer Size -Status: IMPLEMENTADO - -Evidência atual: -- `user/ulibc/src/stdio.c`: `scanf`, `sscanf` e `fscanf` tratam field width explícita - -Prioridade recomendada: FECHADO - -## Fase 4 - Infraestrutura UID - -### UID Infrastructure Completa -Status: PARCIAL - -Evidência atual: -- kernel já possui `getuid/getgid/geteuid/getegid` -- kernel já possui `setuid/setgid/seteuid/setegid/setreuid/setregid` -- fork/clone herdam `uid/gid/euid/egid/suid/sgid` -- job control, sessão e pgrp já existem no kernel - -O que falta: -- `/etc/passwd` real -- autenticação/login real -- integração com utmp/wtmp -- `getlogin()` real -- `who` real -- stubs de passwd/group ainda são hardcoded em partes do userspace/newlib - -Prioridade recomendada: MÉDIA - -## Fase 5 - Low Priority - -### L1: Path Truncation - ENAMETOOLONG -Status: PARCIAL AVANÇADO - -Evidência atual: -- `src/kernel/syscall.c`: `copy_user_cstr()` retorna `-ENAMETOOLONG` -- `src/kernel/syscall.c`: `path_resolve_user()` retorna `-ENAMETOOLONG` - -O que falta: -- padronizar o mesmo comportamento em todos os helpers de path em `fs.c` -- alguns caminhos ainda retornam `-EINVAL` ou operam com truncamento em buffers fixos - -Prioridade recomendada: MÉDIA-BAIXA - -### L2: getlogin/who Session/TTY/utmp -Status: PENDENTE - -Evidência atual: -- `user/ulibc/src/unistd.c`: `getlogin()` retorna fallback fixo -- `user/cmds/who/who.c`: saída fixa placeholder -- `user/ulibc/src/utmp.c`: implementação stub - -Prioridade recomendada: BAIXA - -## Lista Urgente Recomendada - -## Prioridade 1 - Atacar já - -- H1: AIO validation completa -- H2: /proc hardening completo -- H5: futex robusto -- H6: remover fixed VAs -- H7: tmpfs quotas + overflow hardening -- M5: revisão final dos socket copyouts -- M8: CSPRNG real - -## Prioridade 2 - Em seguida - -- H3: SHM permissões/comportamento completos -- M2: access() com real IDs -- M6: overlayfs wrapper lifetime -- Fase 4 restante de userspace/login/passwd -- L1: padronização total de ENAMETOOLONG - -## Prioridade 3 - Baixa - -- L2: getlogin/who/utmp reais - -## Conclusão - -A checklist antiga não deve mais ser usada como retrato fiel do estado atual do projeto. - -O estado real hoje é: - -- muitos itens relevantes já foram corrigidos -- alguns itens centrais ainda estão parciais -- os gaps urgentes se concentram em isolamento, concorrência e política de segurança: - - AIO policy - - /proc hardening - - futex robusto - - fixed VA removal - - tmpfs hardening - - CSPRNG - - revisão final dos copyouts de socket - -## Status do documento - -Documento urgente criado para substituir a checklist desatualizada como referência de planejamento imediato.