[{"data":1,"prerenderedAt":668},["ShallowReactive",2],{"switcher-blog-pareja":3,"art-dirtyclone-cve-2026-43503-root-sin-rastro-kernel-linux-es":6},{"es":4,"en":5},"\u002Fes\u002Fblog\u002Fdirtyclone-cve-2026-43503-root-sin-rastro-kernel-linux\u002F","\u002Fen\u002Fblog\u002Fdirtyclone-cve-2026-43503-traceless-root-linux-kernel\u002F",{"id":7,"title":8,"author":9,"body":10,"date":653,"description":654,"extension":655,"image":656,"meta":657,"navigation":359,"pareja":658,"path":659,"seo":660,"stem":661,"tags":662,"__hash__":667},"blogEs\u002Fes\u002Fblog\u002Fdirtyclone-cve-2026-43503-root-sin-rastro-kernel-linux.md","DirtyClone (CVE-2026-43503): el fallo del kernel Linux que da root sin dejar rastro en disco","Paco Cubel",{"type":11,"value":12,"toc":637},"minimark",[13,18,35,46,50,75,86,93,97,103,109,137,140,144,194,197,201,204,275,288,292,295,300,303,387,398,409,413,423,426,448,451,470,473,499,509,513,527,531,553,557,560,581,584,588,594,597,601,633],[14,15,17],"h2",{"id":16},"otra-de-la-familia-dirty","Otra de la familia «Dirty»",[19,20,21,22,26,27,30,31,34],"p",{},"Si llevas unos años administrando servidores Linux, el apellido «Dirty» te suena a problema serio. ",[23,24,25],"strong",{},"DirtyCOW"," en 2016, ",[23,28,29],{},"DirtyPipe"," en 2022… y ahora, en apenas seis semanas, nos han caído tres primos nuevos: Dirty Frag, Fragnesia y, el que ha hecho más ruido, ",[23,32,33],{},"DirtyClone",".",[19,36,37,38,41,42,45],{},"El 25 de junio, los investigadores de JFrog publicaron el primer exploit funcional de ",[23,39,40],{},"CVE-2026-43503",", al que bautizaron DirtyClone. Y el 1 de julio Canonical sacó su aviso confirmando que ",[23,43,44],{},"todos los Ubuntu soportados estaban afectados"," y que los kernels parcheados ya están disponibles. Lo escribimos con el parche recién aplicado en las máquinas que gestionamos, porque este merece que le prestes atención esta misma semana.",[14,47,49],{"id":48},"en-una-frase","En una frase",[19,51,52,53,57,58,61,62,65,66,69,70,74],{},"Cuando el kernel copia internamente un paquete de red, dos funciones auxiliares (",[54,55,56],"code",{},"__pskb_copy_fclone()"," y ",[54,59,60],{},"skb_shift()",") se ",[23,63,64],{},"olvidan de propagar un flag"," —",[54,67,68],{},"SKBFL_SHARED_FRAG","— que marca que la memoria de ese paquete está compartida con un fichero del disco (la ",[71,72,73],"em",{},"page cache",").",[19,76,77,78,81,82,85],{},"Ese flag perdido es toda la vulnerabilidad. Un usuario local puede colocar en memoria las páginas de un binario privilegiado —por ejemplo ",[54,79,80],{},"\u002Fusr\u002Fbin\u002Fsu","—, «enchufarlas» dentro de un paquete, forzar al kernel a clonarlo y hacerlo pasar por un túnel IPsec que él controla. La operación criptográfica ",[23,83,84],{},"in-place"," de descifrado sobrescribe esas páginas, y con ellas la copia en memoria del binario. Cambia las comprobaciones de login por bytes elegidos por el atacante.",[19,87,88,89,92],{},"Resultado: ",[23,90,91],{},"root",". Sin exploit remoto, sin escalar por la vía clásica, con un binario que ya estaba en el sistema.",[14,94,96],{"id":95},"lo-que-lo-hace-especialmente-incómodo-no-deja-rastro","Lo que lo hace especialmente incómodo: no deja rastro",[19,98,99,100,34],{},"Aquí está el detalle que diferencia a DirtyClone de una escalada de privilegios normal: ",[23,101,102],{},"el fichero del disco no cambia ni un solo byte",[19,104,105,106,108],{},"La modificación vive únicamente en la copia en memoria que el kernel mantiene en la ",[71,107,73],{},". Las consecuencias son las que le quitan el sueño a cualquiera que haga análisis forense:",[110,111,112,124,130],"ul",{},[113,114,115,116,119,120,123],"li",{},"Las herramientas de integridad de ficheros (AIDE, Tripwire, ",[54,117,118],{},"debsums",") ",[23,121,122],{},"no ven nada",": el hash del binario en disco es el correcto.",[113,125,126,129],{},[23,127,128],{},"No hay logs"," del cambio.",[113,131,132,133,136],{},"Un simple ",[23,134,135],{},"reinicio restaura el binario original",", porque la copia envenenada solo estaba en RAM.",[19,138,139],{},"Es decir: un atacante puede conseguir root, hacer lo que necesite y, cuando la máquina se reinicie, la evidencia principal se evapora sola. Para un servidor multi-tenant o de hosting compartido, esto es exactamente el tipo de fallo que no quieres tener abierto ni un día de más.",[14,141,143],{"id":142},"a-quién-afecta","A quién afecta",[110,145,146,156,178,188],{},[113,147,148,151,152,155],{},[23,149,150],{},"Distribuciones afectadas",": todas las de la familia. Canonical confirma ",[23,153,154],{},"todos los Ubuntu soportados","; el fallo está en el stack de red del kernel, así que Debian, RHEL\u002FAlmaLinux\u002FRocky y compañía comparten la raíz.",[113,157,158,161,162,165,166,169,170,173,174,177],{},[23,159,160],{},"Quién lo puede explotar",": cualquier ",[23,163,164],{},"usuario local"," que tenga —o pueda conseguir— la capacidad ",[54,167,168],{},"CAP_NET_ADMIN",". Y ahí está la trampa: en muchos sistemas esa capacidad se obtiene de forma trivial a través de los ",[23,171,172],{},"espacios de nombres de usuario sin privilegios"," (",[71,175,176],{},"unprivileged user namespaces","), que vienen activados por defecto.",[113,179,180,183,184,187],{},[23,181,182],{},"Contenedores",": además de la escalada local, el fallo puede facilitar ",[23,185,186],{},"escapes de contenedor"," si los privilegios de red no están bien acotados.",[113,189,190,193],{},[23,191,192],{},"CVSS 8.8 (alta)",". Hay exploit público desde el 25 de junio. No es teórico.",[19,195,196],{},"Traducido al día a día: si tienes usuarios SSH no confiables, hosting compartido, contenedores, o cualquier cuenta local que no controles al 100 %, estás en el perímetro de riesgo.",[14,198,200],{"id":199},"versiones-parcheadas-en-ubuntu","Versiones parcheadas en Ubuntu",[19,202,203],{},"Estos son los kernels a partir de los cuales el fallo está cerrado, según el aviso oficial de Canonical:",[205,206,207,220],"table",{},[208,209,210],"thead",{},[211,212,213,217],"tr",{},[214,215,216],"th",{},"Versión de Ubuntu",[214,218,219],{},"Kernel parcheado",[221,222,223,235,245,255,265],"tbody",{},[211,224,225,229],{},[226,227,228],"td",{},"Ubuntu 26.04 LTS (Resolute)",[226,230,231,234],{},[54,232,233],{},"7.0.0-22.22"," o superior",[211,236,237,240],{},[226,238,239],{},"Ubuntu 25.10 (Questing)",[226,241,242,234],{},[54,243,244],{},"6.17.0-35.35",[211,246,247,250],{},[226,248,249],{},"Ubuntu 24.04 LTS (Noble)",[226,251,252,234],{},[54,253,254],{},"6.8.0-124.124",[211,256,257,260],{},[226,258,259],{},"Ubuntu 22.04 LTS (Jammy)",[226,261,262,234],{},[54,263,264],{},"5.15.0-181.191",[211,266,267,270],{},[226,268,269],{},"Ubuntu 20.04 LTS (Focal, HWE 5.15)",[226,271,272,234],{},[54,273,274],{},"5.15.0-181.191~20.04.1",[276,277,278],"blockquote",{},[19,279,280,281,284,285,34],{},"Los kernels de nube (AWS, Azure, GCP, Oracle, KVM, Raspberry Pi…) tienen sus propias versiones parcheadas equivalentes. Comprueba la tuya con ",[54,282,283],{},"uname -r"," y contrástala con el aviso de tu distribución: ",[23,286,287],{},"no te fíes solo del número, mira la fecha del paquete",[14,289,291],{"id":290},"qué-tienes-que-hacer-hoy","Qué tienes que hacer hoy",[19,293,294],{},"Sin rodeos. Esto es lo que aplicamos estos días en las máquinas de clientes.",[296,297,299],"h3",{"id":298},"_1-actualizar-el-kernel-y-reiniciar","1. Actualizar el kernel y reiniciar",[19,301,302],{},"Es la única solución definitiva. Y sí, requiere reinicio.",[304,305,310],"pre",{"className":306,"code":307,"language":308,"meta":309,"style":309},"language-bash shiki shiki-themes github-dark-high-contrast","# Debian \u002F Ubuntu\nsudo apt update && sudo apt upgrade\nsudo reboot\n\n# RHEL \u002F AlmaLinux \u002F Rocky\nsudo dnf update kernel\nsudo reboot\n","bash","",[54,311,312,321,346,354,361,367,380],{"__ignoreMap":309},[313,314,317],"span",{"class":315,"line":316},"line",1,[313,318,320],{"class":319},"sQrFR","# Debian \u002F Ubuntu\n",[313,322,324,328,332,335,339,341,343],{"class":315,"line":323},2,[313,325,327],{"class":326},"s_sBn","sudo",[313,329,331],{"class":330},"sTRMh"," apt",[313,333,334],{"class":330}," update",[313,336,338],{"class":337},"sMAXC"," && ",[313,340,327],{"class":326},[313,342,331],{"class":330},[313,344,345],{"class":330}," upgrade\n",[313,347,349,351],{"class":315,"line":348},3,[313,350,327],{"class":326},[313,352,353],{"class":330}," reboot\n",[313,355,357],{"class":315,"line":356},4,[313,358,360],{"emptyLinePlaceholder":359},true,"\n",[313,362,364],{"class":315,"line":363},5,[313,365,366],{"class":319},"# RHEL \u002F AlmaLinux \u002F Rocky\n",[313,368,370,372,375,377],{"class":315,"line":369},6,[313,371,327],{"class":326},[313,373,374],{"class":330}," dnf",[313,376,334],{"class":330},[313,378,379],{"class":330}," kernel\n",[313,381,383,385],{"class":315,"line":382},7,[313,384,327],{"class":326},[313,386,353],{"class":330},[19,388,389,390,393,394,397],{},"Antes de reiniciar, confirma que el grub apunta al kernel nuevo (",[54,391,392],{},"dpkg --list | grep linux-image"," en Debian\u002FUbuntu, ",[54,395,396],{},"grubby --default-kernel"," en familia RHEL). Reiniciar por error al kernel viejo a las tres de la madrugada es un clásico que conviene evitar.",[19,399,400,401,404,405,408],{},"Si tienes ",[54,402,403],{},"unattended-upgrades"," activo, el parche se aplica solo en las próximas 24 horas —",[23,406,407],{},"pero el reinicio no",". Programa la ventana de reinicio tú.",[296,410,412],{"id":411},"_2-mitigación-temporal-mientras-no-puedes-reiniciar","2. Mitigación temporal mientras no puedes reiniciar",[19,414,415,416,419,420,422],{},"Si la máquina no admite parada inmediata, corta la vía por la que se explota el fallo: ",[23,417,418],{},"desactiva los espacios de nombres de usuario sin privilegios",", que es de donde el atacante saca el ",[54,421,168],{}," que necesita.",[19,424,425],{},"En Ubuntu 24.04 o superior (con AppArmor):",[304,427,429],{"className":306,"code":428,"language":308,"meta":309,"style":309},"sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=1\n",[54,430,431],{"__ignoreMap":309},[313,432,433,435,438,442,445],{"class":315,"line":316},[313,434,327],{"class":326},[313,436,437],{"class":330}," sysctl",[313,439,441],{"class":440},"sCcAr"," -w",[313,443,444],{"class":330}," kernel.apparmor_restrict_unprivileged_userns=",[313,446,447],{"class":440},"1\n",[19,449,450],{},"En versiones anteriores:",[304,452,454],{"className":306,"code":453,"language":308,"meta":309,"style":309},"sudo sysctl -w kernel.unprivileged_userns_clone=0\n",[54,455,456],{"__ignoreMap":309},[313,457,458,460,462,464,467],{"class":315,"line":316},[313,459,327],{"class":326},[313,461,437],{"class":330},[313,463,441],{"class":440},[313,465,466],{"class":330}," kernel.unprivileged_userns_clone=",[313,468,469],{"class":440},"0\n",[19,471,472],{},"Para hacerlo persistente entre reinicios:",[304,474,476],{"className":306,"code":475,"language":308,"meta":309,"style":309},"echo \"kernel.apparmor_restrict_unprivileged_userns=1\" | sudo tee \u002Fetc\u002Fsysctl.d\u002F99-cve-2026-43503.conf\n",[54,477,478],{"__ignoreMap":309},[313,479,480,483,486,490,493,496],{"class":315,"line":316},[313,481,482],{"class":440},"echo",[313,484,485],{"class":330}," \"kernel.apparmor_restrict_unprivileged_userns=1\"",[313,487,489],{"class":488},"sWyjQ"," |",[313,491,492],{"class":326}," sudo",[313,494,495],{"class":330}," tee",[313,497,498],{"class":330}," \u002Fetc\u002Fsysctl.d\u002F99-cve-2026-43503.conf\n",[19,500,501,502,505,506],{},"Ojo: esto cierra el camino de explotación más cómodo, no elimina el fallo, y puede romper contenedores o herramientas que dependan de user namespaces sin privilegios (algunos flujos de Docker\u002FPodman rootless, ",[54,503,504],{},"bwrap",", etc.). Pruébalo antes en un entorno de staging. ",[23,507,508],{},"No te libra de actualizar.",[296,510,512],{"id":511},"_3-si-tienes-ubuntu-pro-mira-livepatch","3. Si tienes Ubuntu Pro, mira Livepatch",[19,514,515,516,173,519,522,523,526],{},"Para servidores en los que la ventana de reinicio está lejos, comprueba si el parche está disponible por ",[23,517,518],{},"Livepatch",[54,520,521],{},"pro status"," \u002F ",[54,524,525],{},"canonical-livepatch status","). Aplica el fix en caliente sin reiniciar, como puente hasta la próxima parada planificada.",[296,528,530],{"id":529},"_4-auditar-con-la-salvedad-importante","4. Auditar, con la salvedad importante",[19,532,533,534,537,538,537,541,544,545,548,549,552],{},"Revisa lo de siempre —",[54,535,536],{},"\u002Fvar\u002Flog\u002Fauth.log",", ",[54,539,540],{},"journalctl",[54,542,543],{},"auditd"," con llamadas a ",[54,546,547],{},"ptrace","\u002Fcreación de namespaces— ",[23,550,551],{},"pero asume que este fallo apenas deja huella",". Como el binario en disco no cambia y un reinicio borra la copia envenenada, la ausencia de evidencias no demuestra que no te hayan tocado. Si el servidor tiene usuarios locales no confiables y llevaba días sin parchear, trátalo como potencialmente comprometido: rota credenciales y claves.",[14,554,556],{"id":555},"lo-que-hemos-hecho-nosotros-estos-días","Lo que hemos hecho nosotros estos días",[19,558,559],{},"En Atenea Systems el orden fue el de siempre cuando sale una de estas:",[561,562,563,569,575],"ol",{},[113,564,565,568],{},[23,566,567],{},"Servidores con usuarios externos primero",": hosting compartido, jails de clientes, máquinas con SFTP y cuentas locales de terceros.",[113,570,571,574],{},[23,572,573],{},"Nodos con contenedores",": por el riesgo añadido de escape.",[113,576,577,580],{},[23,578,579],{},"VPS dedicados de un solo administrador",": menor superficie local, van después.",[19,582,583],{},"Donde la ventana de reinicio aún no había llegado, dejamos activada la restricción de user namespaces como paliativo. A día de hoy todas las máquinas que gestionamos están en kernel parcheado o mitigadas a la espera de su reinicio programado.",[14,585,587],{"id":586},"qué-nos-llevamos","Qué nos llevamos",[19,589,590,591,34],{},"DirtyClone no es un fallo remoto que cualquiera dispare desde internet: hace falta una cuenta local. Pero es precisamente el tipo de escalada que convierte «un usuario molesto» en «root en tu servidor», y encima ",[23,592,593],{},"sin dejar el rastro que normalmente te avisa de que algo va mal",[19,595,596],{},"La receta, como cada vez que sale una de estas, se reduce a cinco gestos: mirar la versión del kernel, mirar la fecha del último reinicio, actualizar, reiniciar y verificar. Un plan de parcheo que funcione no es un lujo: es lo que separa el servidor que sobrevive a un mal miércoles del que no. Si el tuyo consiste en «cuando me acuerde», hablamos.",[14,598,600],{"id":599},"referencias","Referencias",[110,602,603,612,619,626],{},[113,604,605],{},[606,607,611],"a",{"href":608,"rel":609},"https:\u002F\u002Fcanonical.com\u002Fblog\u002Fdirtyclone-linux-vulnerability-fixes-available",[610],"nofollow","DirtyClone Linux kernel local privilege escalation vulnerability — fixes available (Canonical)",[113,613,614],{},[606,615,618],{"href":616,"rel":617},"https:\u002F\u002Fresearch.jfrog.com\u002Fpost\u002Fdissecting-and-exploiting-linux-lpe-variant-dirtyclone-cve-2026-43503\u002F",[610],"Dissecting and Exploiting Linux LPE Variant: DirtyClone (CVE-2026-43503) — JFrog Security Research",[113,620,621],{},[606,622,625],{"href":623,"rel":624},"https:\u002F\u002Fubuntu.com\u002Fsecurity\u002FCVE-2026-43503",[610],"CVE-2026-43503 — Ubuntu Security",[113,627,628],{},[606,629,632],{"href":630,"rel":631},"https:\u002F\u002Fwww.securityweek.com\u002Fdirtyclone-linux-kernel-vulnerability-leads-to-root-access\u002F",[610],"'DirtyClone' Linux Kernel Vulnerability Leads to Root Access — SecurityWeek",[634,635,636],"style",{},"html pre.shiki code .sQrFR, html code.shiki .sQrFR{--shiki-default:#BDC4CC}html pre.shiki code .s_sBn, html code.shiki .s_sBn{--shiki-default:#FFB757}html pre.shiki code .sTRMh, html code.shiki .sTRMh{--shiki-default:#ADDCFF}html pre.shiki code .sMAXC, html code.shiki .sMAXC{--shiki-default:#F0F3F6}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sCcAr, html code.shiki .sCcAr{--shiki-default:#91CBFF}html pre.shiki code .sWyjQ, html code.shiki .sWyjQ{--shiki-default:#FF9492}",{"title":309,"searchDepth":323,"depth":323,"links":638},[639,640,641,642,643,644,650,651,652],{"id":16,"depth":323,"text":17},{"id":48,"depth":323,"text":49},{"id":95,"depth":323,"text":96},{"id":142,"depth":323,"text":143},{"id":199,"depth":323,"text":200},{"id":290,"depth":323,"text":291,"children":645},[646,647,648,649],{"id":298,"depth":348,"text":299},{"id":411,"depth":348,"text":412},{"id":511,"depth":348,"text":512},{"id":529,"depth":348,"text":530},{"id":555,"depth":323,"text":556},{"id":586,"depth":323,"text":587},{"id":599,"depth":323,"text":600},"2026-07-02","El 25 de junio se publicó el exploit de «DirtyClone», una escalada a root en el kernel Linux que reescribe binarios en memoria sin tocar el fichero del disco: ni logs, ni cambios de hash, y un reinicio lo borra. Canonical ya tiene los kernels parcheados. Te contamos qué es, a quién afecta y qué hacer hoy.","md","\u002Fog\u002Fog-default.png",{},"dirtyclone-cve-2026-43503-traceless-root-linux-kernel","\u002Fes\u002Fblog\u002Fdirtyclone-cve-2026-43503-root-sin-rastro-kernel-linux",{"title":8,"description":654},"es\u002Fblog\u002Fdirtyclone-cve-2026-43503-root-sin-rastro-kernel-linux",[663,664,665,666],"Seguridad","Linux","Servidores","CVE","ZbW9uvp1PWw-KqoAs1HlVPtZDOp67RAW97EsvcrhyUE",1784782835101]