
Análise técnica de CVE-2021-3493, uma vulnerabilidade de escalonamento local de privilégios no Ubuntu OverlayFS, incluindo explicação da causa raiz e versões afetadas.
TL;DR
Descubra como uma vulnerabilidade no OverlayFS permite que usuários locais no Ubuntu obtenham privilégios de root.
Resumo da Vulnerabilidade
Um problema específico do Ubuntu no sistema de arquivos overlayfs no kernel Linux, onde ele não validava adequadamente a aplicação de capacidades do sistema de arquivos em relação a namespaces de usuário. Um atacante local poderia usar isso para obter privilégios elevados, devido a um patch mantido no Ubuntu para permitir montagens overlayfs sem privilégios.
CVE-2021-3493
Crédito
Um pesquisador de segurança independente relatou esta vulnerabilidade ao programa de divulgação segura SSD Secure Disclosure.
Versões Afetadas
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
Resposta do Fornecedor
"Publicamos avisos de segurança para este problema hoje em
https://ubuntu.com/security/notices/USN-4915-1 https://ubuntu.com/security/notices/USN-4916-1 https://ubuntu.com/security/notices/USN-4917-1
bem como tornamos o problema público em nosso rastreador de CVE:
https://ubuntu.com/security/CVE-2021-3493
A seguir está o conteúdo da mensagem enviada para a lista oss-security: https://www.openwall.com/lists/oss-security/2021/04/16/1
Análise da Vulnerabilidade
O Linux suporta capacidades de arquivo armazenadas em atributos estendidos de arquivo que funcionam de forma semelhante ao setuid-bit, mas podem ser mais granulares. Um procedimento simplificado para definir capacidades de arquivo em pseudo-código se parece com isto: setxattr(...): if cap_convert_nscap(...) is not OK: then fail vfs_setxattr(...)
A chamada importante é cap_convert_nscap, que verifica permissões em relação a namespaces.
Se definirmos as capacidades de arquivo a partir do nosso próprio namespace e em nossa própria montagem, não há problema e temos permissão para fazê-lo. O problema é que quando o OverlayFS encaminha esta operação para o sistema de arquivos subjacente, ele apenas chama vfs_setxattr e ignora as verificações em cap_convert_nscap.
Isso permite definir capacidades arbitrárias em arquivos no namespace/montagem externo, onde elas também serão aplicadas durante a execução.
No Linux 5.11, a chamada a cap_convert_nscap foi movida para vfs_setxattr, portanto não está mais vulnerável.