Vulnerabilitat en uClibc i uClibc-ng que permet la falsificació de la memòria cau DNS

A les biblioteques C estàndard uClibc i uClibc-ng, utilitzades en molts dispositius incrustats i portàtils, s'ha identificat una vulnerabilitat (CVE no assignat) que permet inserir dades fictícies a la memòria cau DNS, que es pot utilitzar per substituir l'adreça IP d'un domini arbitrari a la memòria cau i redirigeix ​​les sol·licituds al domini del servidor de l'atacant.

El problema afecta diversos firmwares de Linux per a encaminadors, punts d'accés i dispositius d'Internet de les coses, així com distribucions de Linux incrustades com OpenWRT i Embedded Gentoo. S'observa que la vulnerabilitat apareix en dispositius de molts fabricants (per exemple, uClibc s'utilitza al firmware Linksys, Netgear i Axis), però com que la vulnerabilitat no es corregeix a uClibc i uClibc-ng, informació detallada sobre dispositius específics i fabricants els productes dels quals si el problema està disponible, encara no s'han revelat.

La vulnerabilitat es deu a l'ús d'identificadors de transacció predictibles al codi per enviar consultes DNS. El número d'identificació de la sol·licitud DNS es va escollir simplement augmentant el comptador sense utilitzar l'aleatorització addicional dels números de port, la qual cosa va permetre enverinar la memòria cau DNS mitjançant l'enviament preventiu de paquets UDP amb respostes fictícias (la resposta s'acceptarà si arribava abans). la resposta del servidor real i inclou l'ID correcte). A diferència del mètode Kaminsky proposat el 2008, ni tan sols cal endevinar l'identificador de la transacció, ja que inicialment és previsible (el valor s'estableix inicialment en 1, que s'incrementa amb cada sol·licitud, en lloc de triar-se aleatòriament).

Vulnerabilitat en uClibc i uClibc-ng que permet la falsificació de la memòria cau DNS

Per protegir-se de la força bruta de l'identificador, l'especificació recomana a més utilitzar una distribució aleatòria del nombre de ports de xarxa d'origen des dels quals s'envien les sol·licituds de DNS, que compensa la mida insuficient de l'identificador. Quan activeu l'aleatorització de ports per generar una resposta fictícia, a més de seleccionar un identificador de 16 bits, també heu de seleccionar el número de port de xarxa. A uClibc i uClibc-ng, aquesta aleatorització no estava activada explícitament (quan es cridava a bind, no s'especificava un port UDP d'origen aleatori) i el seu ús depenia de la configuració del sistema operatiu.

Quan l'aleatorització del pot està desactivada, determinar l'ID de sol·licitud incrementat es marca com una tasca trivial. Però fins i tot si s'utilitza l'aleatorització, l'atacant només necessita endevinar el port de xarxa de l'interval 32768-60999, per al qual pot utilitzar l'enviament massiu simultània de respostes fictícias a diferents ports de xarxa.

Vulnerabilitat en uClibc i uClibc-ng que permet la falsificació de la memòria cau DNS

El problema s'ha confirmat a totes les versions actuals d'uClibc i uClibc-ng, incloses les versions més recents d'uClibc 0.9.33.2 i uClibc-ng 1.0.40. El setembre de 2021, es va enviar informació sobre la vulnerabilitat al CERT/CC per a la preparació coordinada de les solucions. El gener de 2022, les dades sobre el problema es van compartir amb més de 200 fabricants que col·laboraven amb CERT/CC. Al març, es va intentar contactar per separat amb el responsable del projecte uClibc-ng, però ell va respondre que no era capaç de solucionar la vulnerabilitat pel seu compte i va recomanar revelar públicament informació sobre el problema, amb l'esperança de rebre ajuda per desenvolupar un arreglar des de la comunitat. Entre els fabricants, NETGEAR va anunciar el llançament d'una actualització que elimina la vulnerabilitat.

Font: opennet.ru

Afegeix comentari