[{"data":1,"prerenderedAt":1113},["ShallowReactive",2],{"switcher-blog-pareja":3,"art-php2shell-php-nodejs-parches-seguridad-octubre-2026-es":6},{"es":4,"en":5},"\u002Fes\u002Fblog\u002Fphp2shell-php-nodejs-parches-seguridad-octubre-2026\u002F","\u002Fen\u002Fblog\u002Fphp2shell-php-nodejs-security-patches-october-2026\u002F",{"id":7,"title":8,"author":9,"body":10,"date":1096,"description":1097,"extension":1098,"image":1099,"meta":1100,"navigation":1101,"pareja":1102,"path":1103,"seo":1104,"sin_cta":1105,"stem":1106,"tags":1107,"__hash__":1112},"blogEs\u002Fes\u002Fblog\u002Fphp2shell-php-nodejs-parches-seguridad-octubre-2026.md","PHP2Shell y Node.js: el 21 de octubre tocó parchear los dos, y así se hace sin romper nada","Paco Cubel",{"type":11,"value":12,"toc":1066},"minimark",[13,18,31,34,48,52,89,93,104,107,125,130,148,151,165,169,172,209,212,216,220,255,270,273,306,310,402,406,413,449,456,460,466,490,496,500,522,533,536,556,577,581,591,597,624,628,631,673,677,688,705,708,712,723,757,764,768,783,790,794,804,808,812,878,882,909,930,934,948,952,963,970,973,977,1062],[14,15,17],"h2",{"id":16},"un-miércoles-para-olvidar","Un miércoles para olvidar",[19,20,21,22,26,27,30],"p",{},"El 21 de octubre de 2026 coincidieron dos de las plataformas que más webs mueven: ",[23,24,25],"strong",{},"PHP"," publicó una release de seguridad de urgencia y, unas horas después, ",[23,28,29],{},"Node.js"," sacó la suya. En redes ya se hablaba de \"día de pesadilla\" para quien lleva servidores, y no era exagerado: el mismo día salieron también avisos de LiteLLM, Next.js y varios productos empresariales.",[19,32,33],{},"Aquí nos centramos en lo que toca a casi todo el mundo que tiene una web o una API: PHP y Node.js. Vamos al grano.",[35,36,37],"blockquote",{},[19,38,39,42,43,47],{},[23,40,41],{},"Actualizado el 22 de octubre."," Circula que \"se han saltado el parche\". Lo hemos comprobado y lo explicamos más abajo, en el apartado ",[44,45,46],"em",{},"Actualización del 22 de octubre",": lo que se han saltado son las medidas temporales y algunas reglas de cortafuegos, no el parche oficial.",[14,49,51],{"id":50},"en-una-frase","En una frase",[53,54,55,77],"ul",{},[56,57,58,60,61,64,65,68,69,72,73,76],"li",{},[23,59,25],{},": dos fallos críticos (CVE-2026-109618 y CVE-2026-109619, CVSS v4.0 ",[23,62,63],{},"9.2"," cada uno) permiten a un atacante ",[23,66,67],{},"ejecutar código en el servidor sin autenticarse",". Hay que pasar a ",[23,70,71],{},"8.5.12, 8.4.27, 8.3.36 u 8.2.35"," y ",[23,74,75],{},"reiniciar los procesos de PHP",".",[56,78,79,81,82,85,86,76],{},[23,80,29],{},": diez fallos, cuatro de gravedad alta. El peor (CVE-2026-111497) es una escritura fuera de límites en el ",[23,83,84],{},"descompresor Brotli"," que permite ejecutar código. Hay que pasar a ",[23,87,88],{},"26.12.1, 24.22.1 o 22.23.4",[14,90,92],{"id":91},"php-qué-ha-pasado","PHP: qué ha pasado",[19,94,95,96,99,100,103],{},"La historia tiene su miga. Los detalles de los fallos ",[23,97,98],{},"se filtraron el 20 de octubre",", antes de que hubiera parche, y circularon con el nombre de ",[23,101,102],{},"\"php2shell\"",". Ese mismo día el equipo de PHP confirmó dos vulnerabilidades críticas y anunció la release para el 21 a las 14:00 UTC (las 16:00 en España).",[19,105,106],{},"Según el aviso oficial de php.net:",[53,108,109,115],{},[56,110,111,114],{},[23,112,113],{},"CVE-2026-109618 — ejecución de código por corrupción tras quedarse sin memoria."," Si PHP se queda sin memoria a mitad de preparar una petición, puede interrumpirse con datos internos a medio inicializar, y la limpieza posterior los trata como válidos.",[56,116,117,120,121,124],{},[23,118,119],{},"CVE-2026-109619 — ejecución de código por estado global \"caducado\"."," Datos internos que pertenecen a una petición pueden sobrevivir después de liberarse su memoria. La ",[23,122,123],{},"siguiente petición que atiende el mismo proceso"," puede usarlos antes de que se reinicien.",[126,127,129],"h3",{"id":128},"a-quién-afecta","A quién afecta",[19,131,132,133,136,137,140,141,144,145,76],{},"PHP lo dice sin rodeos: ",[23,134,135],{},"todas las instalaciones de PHP que sirven peticiones web",", incluidas ",[23,138,139],{},"PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed",". Considera que el riesgo es ",[23,142,143],{},"mayor con mod_php",", donde hay un exploit demostrado en el que una petición sin autenticar desencadena el ataque ",[23,146,147],{},"antes de que se ejecute una sola línea de tu aplicación",[19,149,150],{},"Eso último es importante: da igual lo bien hecha que esté tu web, tu WordPress o tu framework. El fallo está en PHP, no en tu código.",[19,152,153,156,157,160,161,164],{},[23,154,155],{},"¿Y las versiones antiguas?"," PHP 8.1 y anteriores ya no reciben actualizaciones del proyecto. El aviso de php.net no detalla las ramas afectadas, pero Cloudflare, que participó en la respuesta coordinada, habla de ",[23,158,159],{},"todos los servidores con PHP 5.4 o posterior",". El equipo de seguridad sí ha publicado parches mínimos para ",[23,162,163],{},"7.4, 8.0 y 8.1"," para quien compile desde el código fuente, y algunas distribuciones y proveedores de soporte extendido los portan a sus paquetes. Si tu servidor va con un PHP fuera de soporte, asume que te afecta mientras no demuestres lo contrario.",[126,166,168],{"id":167},"se-está-explotando","¿Se está explotando?",[19,170,171],{},"Aquí hay que ser precisos, porque circula mucho titular:",[53,173,174,189,199],{},[56,175,176,179,180,183,184,188],{},[23,177,178],{},"Hadrian"," informa de explotación ",[23,181,182],{},"a gran escala"," desde la mañana del 21, antes incluso del parche, sobre todo a través de la función de progreso de subida de sesiones (",[185,186,187],"code",{},"session.upload_progress",").",[56,190,191,194,195,198],{},[23,192,193],{},"watchTowr"," dice haber visto ",[23,196,197],{},"intentos de explotación"," de los dos fallos en su red de señuelos.",[56,200,201,204,205,208],{},[23,202,203],{},"CISA",", en su alerta, decía no haber observado explotación en el momento de publicarla, y los dos CVE ",[23,206,207],{},"no estaban"," en su catálogo de vulnerabilidades explotadas (KEV) a última hora del 21.",[19,210,211],{},"Traducción: hay intentos reales y la ventana entre \"sale el parche\" y \"lo usan contra ti\" se mide en horas. No esperes a la confirmación oficial para parchear.",[14,213,215],{"id":214},"php-qué-tienes-que-hacer-hoy","PHP: qué tienes que hacer hoy",[126,217,219],{"id":218},"_1-mira-qué-versión-corre-de-verdad","1. Mira qué versión corre de verdad",[221,222,227],"pre",{"className":223,"code":224,"language":225,"meta":226,"style":226},"language-bash shiki shiki-themes github-dark-high-contrast","php -v\nphp-fpm8.3 -v   # o la versión que tengas instalada\n","bash","",[185,228,229,242],{"__ignoreMap":226},[230,231,234,238],"span",{"class":232,"line":233},"line",1,[230,235,237],{"class":236},"s_sBn","php",[230,239,241],{"class":240},"sCcAr"," -v\n",[230,243,245,248,251],{"class":232,"line":244},2,[230,246,247],{"class":236},"php-fpm8.3",[230,249,250],{"class":240}," -v",[230,252,254],{"class":253},"sQrFR","   # o la versión que tengas instalada\n",[19,256,257,258,261,262,265,266,269],{},"Ojo: ",[185,259,260],{},"php -v"," te dice la versión de la ",[23,263,264],{},"línea de comandos",", que no tiene por qué ser la que sirve tu web. Si tienes PHP-FPM o mod_php, compruébalo también ahí (una página con ",[185,267,268],{},"phpinfo()"," temporal, que borras al momento, o el propio binario de FPM).",[19,271,272],{},"En Docker:",[221,274,276],{"className":223,"code":275,"language":225,"meta":226,"style":226},"docker exec \u003Ccontenedor> php -v\n",[185,277,278],{"__ignoreMap":226},[230,279,280,283,287,291,294,298,301,304],{"class":232,"line":233},[230,281,282],{"class":236},"docker",[230,284,286],{"class":285},"sTRMh"," exec",[230,288,290],{"class":289},"sWyjQ"," \u003C",[230,292,293],{"class":285},"contenedo",[230,295,297],{"class":296},"sMAXC","r",[230,299,300],{"class":289},">",[230,302,303],{"class":285}," php",[230,305,241],{"class":240},[126,307,309],{"id":308},"_2-actualiza","2. Actualiza",[53,311,312,329,335,383,396],{},[56,313,314,317,318,321,322,325,326,328],{},[23,315,316],{},"Debian \u002F Ubuntu"," con los paquetes de la distribución: ",[185,319,320],{},"sudo apt update && sudo apt upgrade",". Las distribuciones suelen ",[23,323,324],{},"portar el parche a su propia versión"," sin cambiar el número grande, así que no busques \"8.3.36\" en ",[185,327,260],{},": busca el aviso de seguridad de tu distribución (Debian Security Tracker, Ubuntu Security Notices) y confirma que el paquete instalado es el corregido.",[56,330,331,334],{},[23,332,333],{},"Repositorios de terceros"," (Ondřej Surý, Remi…): actualiza igual y comprueba que llegas a la versión parcheada.",[56,336,337,340,341,344,345,348,349,352,353],{},[23,338,339],{},"Docker con etiqueta flotante"," (",[185,342,343],{},"php:8.4-fpm",", ",[185,346,347],{},"php:8.3-apache","…): las imágenes oficiales ya están actualizadas. Hay que ",[23,350,351],{},"reconstruir bajando la imagen nueva",":",[221,354,356],{"className":223,"code":355,"language":225,"meta":226,"style":226},"docker compose build --pull\ndocker compose up -d\n",[185,357,358,371],{"__ignoreMap":226},[230,359,360,362,365,368],{"class":232,"line":233},[230,361,282],{"class":236},[230,363,364],{"class":285}," compose",[230,366,367],{"class":285}," build",[230,369,370],{"class":240}," --pull\n",[230,372,373,375,377,380],{"class":232,"line":244},[230,374,282],{"class":236},[230,376,364],{"class":285},[230,378,379],{"class":285}," up",[230,381,382],{"class":240}," -d\n",[56,384,385,340,388,391,392,395],{},[23,386,387],{},"Docker con versión fija",[185,389,390],{},"php:8.4.14-apache",", por ejemplo): reconstruir no sirve de nada. Hay que ",[23,393,394],{},"cambiar el Dockerfile"," a la versión parcheada de esa rama.",[56,397,398,401],{},[23,399,400],{},"No te olvides del phpMyAdmin"," y similares: también llevan PHP dentro. Si va en contenedor, baja la imagen nueva y recrea el contenedor (y, de paso, pregúntate si tiene que estar abierto a internet).",[126,403,405],{"id":404},"_3-reinicia-los-procesos-de-php","3. Reinicia los procesos de PHP",[19,407,408,409,412],{},"Esto no es opcional. Uno de los dos fallos vive precisamente en el estado que ",[23,410,411],{},"sobrevive entre peticiones dentro del mismo proceso",". Hasta que no reinicias PHP-FPM o Apache, los procesos viejos siguen ahí.",[221,414,416],{"className":223,"code":415,"language":225,"meta":226,"style":226},"sudo systemctl restart php8.3-fpm   # tu versión\nsudo systemctl restart apache2      # si usas mod_php\n",[185,417,418,435],{"__ignoreMap":226},[230,419,420,423,426,429,432],{"class":232,"line":233},[230,421,422],{"class":236},"sudo",[230,424,425],{"class":285}," systemctl",[230,427,428],{"class":285}," restart",[230,430,431],{"class":285}," php8.3-fpm",[230,433,434],{"class":253},"   # tu versión\n",[230,436,437,439,441,443,446],{"class":232,"line":244},[230,438,422],{"class":236},[230,440,425],{"class":285},[230,442,428],{"class":285},[230,444,445],{"class":285}," apache2",[230,447,448],{"class":253},"      # si usas mod_php\n",[19,450,451,452,455],{},"Y después, ",[23,453,454],{},"vuelve a comprobar la versión",". Lo que no se comprueba no está hecho.",[126,457,459],{"id":458},"_4-si-hoy-no-puedes-actualizar","4. Si hoy no puedes actualizar",[19,461,462,463,352],{},"PHP publica medidas temporales que ",[23,464,465],{},"no sustituyen al parche",[53,467,468,483],{},[56,469,470,471,474,475,478,479,482],{},"Para CVE-2026-109619: ",[185,472,473],{},"session.upload_progress.enabled = 0"," y reiniciar los procesos. Es además la vía que más se está usando en los ataques. En PHP 8.5, también ",[185,476,477],{},"fatal_error_backtraces = 0",". Ojo: el propio PHP aclara que lo primero ",[23,480,481],{},"bloquea las vías de ataque confirmadas, pero no otras variantes",", y lo segundo solo la vía confirmada.",[56,484,485,486,489],{},"Para CVE-2026-109618: ajustes de límites de memoria y de tamaño de las peticiones que detalla el propio aviso. Varios investigadores advierten de que esta parte ",[23,487,488],{},"nunca fue un arreglo completo",", así que no te quedes ahí.",[19,491,492,493,76],{},"PHP lo resume así: no hay mitigaciones completas, ",[23,494,495],{},"actualizar es la única opción segura",[126,497,499],{"id":498},"_5-si-tu-web-pasa-por-cloudflare-ya-tienes-un-escudo-con-condiciones","5. Si tu web pasa por Cloudflare, ya tienes un escudo (con condiciones)",[19,501,502,503,506,507,510,511,514,515,518,519,76],{},"Cloudflare se adelantó: desde las ",[23,504,505],{},"03:02 UTC del 21 de octubre",", unas nueve horas antes de la divulgación pública, protege por defecto contra php2shell a todos los clientes con su cortafuegos web (WAF), ",[23,508,509],{},"incluido el plan gratuito",". En el plan Free las reglas están en el ",[44,512,513],{},"Cloudflare Managed Free Ruleset"," con el nombre ",[23,516,517],{},"\"Generic Rules - Anomalous Execution\""," y no hay que activar nada; en los planes de pago van en el ",[44,520,521],{},"Cloudflare Managed Ruleset",[19,523,524,525,528,529,532],{},"Lo interesante es cómo lo hacen. Mirar solo la petición no bastaba para distinguir un ataque de tráfico legítimo, así que han estrenado una función nueva que analiza ",[23,526,527],{},"la petición y la respuesta de tu servidor juntas",", y puede bloquear la respuesta antes de que llegue al atacante. Además cuentan que los atacantes iban ",[23,530,531],{},"modificando el ataque para esquivar las reglas"," y que ellos las han ido ajustando sobre la marcha.",[19,534,535],{},"Ahora, las condiciones, que son las que hacen que esto sirva o no:",[53,537,538,544,550],{},[56,539,540,543],{},[23,541,542],{},"El dominio tiene que ir con la nube naranja"," (tráfico pasando por Cloudflare). Si el registro DNS está en gris, Cloudflare no ve nada.",[56,545,546,549],{},[23,547,548],{},"Tu servidor no debe aceptar conexiones directas a su IP."," Si alguien conoce la IP real y ataca directamente, se salta Cloudflare entero. Lo suyo es que el cortafuegos del servidor solo deje entrar el tráfico de los rangos de Cloudflare.",[56,551,552,555],{},[23,553,554],{},"No sustituye al parche."," El propio Cloudflare lo dice: es una capa más mientras actualizas, no la solución.",[19,557,558,559,344,562,344,565,568,569,572,573,576],{},"Y vigila si algún proceso de PHP (",[185,560,561],{},"php-fpm",[185,563,564],{},"apache2",[185,566,567],{},"httpd",") lanza una shell o herramientas de descarga como ",[185,570,571],{},"curl"," o ",[185,574,575],{},"wget",". Si pasa, trátalo como un servidor comprometido: aíslalo, guarda los registros y busca webshells, tareas cron nuevas y usuarios nuevos.",[14,578,580],{"id":579},"actualización-del-22-de-octubre-se-han-saltado-el-parche","Actualización del 22 de octubre: ¿se han saltado el parche?",[19,582,583,584,587,588,76],{},"Desde ayer corre por redes que el parche de PHP \"ya se lo han saltado\". Lo hemos comprobado y, a día de hoy, ",[23,585,586],{},"no hay ninguna prueba de eso",". Ni php.net ni los equipos que siguen el caso de cerca (watchTowr, el NCSC de Países Bajos, los blogs en directo de varias empresas de seguridad) han publicado un fallo en el parche, y php.net no ha sacado ninguna versión nueva: las últimas siguen siendo ",[23,589,590],{},"8.5.12, 8.4.27, 8.3.36 y 8.2.35",[19,592,593,594,352],{},"Lo que sí se han saltado, y de ahí viene seguramente la confusión, son tres cosas que ",[23,595,596],{},"no son el parche",[53,598,599,608,614],{},[56,600,601,604,605,607],{},[23,602,603],{},"Las medidas temporales."," Antes de que saliera el parche, mucha gente desactivó ",[185,606,187],{}," y lo dio por resuelto. PHP rectificó: eso cierra las vías de ataque que se conocían, no las variantes. Quien se quedó solo con ese ajuste sigue expuesto.",[56,609,610,613],{},[23,611,612],{},"Algunas reglas de cortafuegos."," Los atacantes han ido retocando las peticiones para esquivar las reglas de los WAF. Por ejemplo, una revisión anterior de algunas reglas comprobaba el tamaño de la petición mirando una cabecera, y se la saltaban enviando la petición troceada, sin esa cabecera. Los proveedores van ajustando las reglas, pero un cortafuegos es una capa más, no el arreglo.",[56,615,616,619,620,623],{},[23,617,618],{},"Los exploits públicos."," Han aparecido más de cien repositorios en GitHub con pruebas de concepto, entre ellas una variante que esquiva una de las protecciones de memoria del sistema (ASLR). Eso hace el ataque más fácil ",[23,621,622],{},"contra un PHP sin parchear",". Contra un PHP actualizado, no hay nada publicado que funcione.",[126,625,627],{"id":626},"por-qué-hay-servidores-actualizados-que-siguen-siendo-vulnerables","Por qué hay servidores \"actualizados\" que siguen siendo vulnerables",[19,629,630],{},"Esto sí está pasando, y es lo que puede hacer creer que el parche no sirve:",[53,632,633,639,647,657,663],{},[56,634,635,638],{},[23,636,637],{},"No se ha reiniciado PHP."," Se instala el paquete nuevo pero PHP-FPM o Apache siguen con los procesos viejos en memoria. Uno de los dos fallos vive justo ahí.",[56,640,641,644,645,76],{},[23,642,643],{},"La distribución todavía no tenía el paquete corregido"," cuando se actualizó, o lo tiene con un número de versión que no \"parece\" el nuevo. Comprueba el aviso de seguridad de tu distribución y busca los CVE en el registro de cambios del paquete, no el número de ",[185,646,260],{},[56,648,649,652,653,656],{},[23,650,651],{},"La imagen de Docker se reconstruyó demasiado pronto",", antes de que la etiqueta apuntase a la versión corregida. Vuelve a hacer ",[185,654,655],{},"docker compose build --pull"," y comprueba la versión dentro del contenedor.",[56,658,659,662],{},[23,660,661],{},"El PHP está fuera de soporte."," PHP 8.1 y anteriores no tienen versión oficial: solo parches mínimos para compilar a mano en 7.4, 8.0 y 8.1, y nada para PHP 5.",[56,664,665,668,669,672],{},[23,666,667],{},"El PHP viene dentro de otro producto",": un panel, un appliance, una imagen de un tercero. Ese PHP no lo actualiza tu ",[185,670,671],{},"apt upgrade","; depende de que el fabricante saque su versión.",[126,674,676],{"id":675},"una-ayuda-para-hacer-inventario-el-repositorio-del-ncsc-de-países-bajos","Una ayuda para hacer inventario: el repositorio del NCSC de Países Bajos",[19,678,679,680,687],{},"El Centro Nacional de Ciberseguridad de Países Bajos (NCSC-NL) ha publicado en GitHub un repositorio gratuito, ",[681,682,686],"a",{"href":683,"rel":684},"https:\u002F\u002Fgithub.com\u002FNCSC-NL\u002Fphp2shell",[685],"nofollow","NCSC-NL\u002Fphp2shell",", con información operativa sobre los dos fallos. Lo más útil:",[53,689,690,696,702],{},[56,691,692,695],{},[23,693,694],{},"Material de detección y mitigación",", para saber si te están atacando y qué aplicar mientras actualizas.",[56,697,698,701],{},[23,699,700],{},"Listas de programas y productos que llevan PHP dentro."," Es justo lo que hace falta para el último punto de arriba: saber si algo que usas trae su propio PHP y hay que esperar (o reclamar) la actualización del fabricante.",[56,703,704],{},"Sus recomendaciones coinciden con las nuestras: empezar por lo que está expuesto a internet, actualizar o aplicar el parche de la distribución, revisar aparte el PHP que va dentro de imágenes y appliances, y vigilar los registros.",[19,706,707],{},"El propio NCSC avisa de que el repositorio no está completo y lo van ampliando, así que merece la pena volver a mirarlo en los próximos días.",[14,709,711],{"id":710},"nodejs-qué-ha-pasado","Node.js: qué ha pasado",[19,713,714,715,718,719,722],{},"El mismo día, el proyecto Node.js publicó parches para las tres ramas con soporte: ",[23,716,717],{},"26.x, 24.x y 22.x",". Corrigen ",[23,720,721],{},"diez vulnerabilidades",": cuatro altas, tres medias y tres bajas. Las altas:",[53,724,725,734,747],{},[56,726,727,730,731,733],{},[23,728,729],{},"CVE-2026-111497",": escritura fuera de límites en el ",[23,732,84],{}," que permite ejecutar código. Afecta a las tres ramas.",[56,735,736,72,739,742,743,746],{},[23,737,738],{},"CVE-2026-105483",[23,740,741],{},"CVE-2026-106069",": dos formas de ",[23,744,745],{},"saltarse la comprobación del nombre en un certificado TLS"," (la primera, solo en 26.x y 24.x).",[56,748,749,752,753,756],{},[23,750,751],{},"CVE-2026-105482",": ",[185,754,755],{},"dns.resolve"," corta los nombres que contienen un carácter nulo.",[19,758,759,760,763],{},"La release también actualiza dependencias con fallos públicos (c-ares, OpenSSL, SQLite, Undici) y ",[23,761,762],{},"retira la confianza en un certificado intermedio de eMudhra"," tras el compromiso de esa autoridad de certificación.",[126,765,767],{"id":766},"a-quién-afecta-de-verdad-lo-de-brotli","A quién afecta de verdad lo de Brotli",[19,769,770,771,774,775,778,779,782],{},"El riesgo serio aparece cuando tu aplicación ",[23,772,773],{},"descomprime Brotli que viene de fuera",": llamadas a ",[185,776,777],{},"zlib.brotliDecompress",", cuerpos de petición comprimidos que acepte tu servidor o respuestas que recibes con ",[185,780,781],{},"fetch"," de servidores ajenos. Un Node que no recibe nada de internet y solo habla con servicios tuyos tiene un riesgo mucho menor. Menor no es cero: actualiza igual.",[19,784,785,786,789],{},"Un detalle que mucha gente pasa por alto: ",[23,787,788],{},"tener nginx delante no te protege",". Nginx reenvía la petición y Node la recibe igual.",[126,791,793],{"id":792},"las-ramas-sin-soporte-no-reciben-parche","Las ramas sin soporte no reciben parche",[19,795,796,797,800,801,76],{},"Node.js lo recuerda en cada aviso: ",[23,798,799],{},"las versiones fuera de soporte están siempre afectadas"," cuando sale una release de seguridad. Si sigues en Node 18 o 20, no hay parche que poner: hay que ",[23,802,803],{},"subir de rama",[14,805,807],{"id":806},"nodejs-qué-tienes-que-hacer-hoy","Node.js: qué tienes que hacer hoy",[126,809,811],{"id":810},"_1-mira-qué-versión-corre","1. Mira qué versión corre",[221,813,815],{"className":223,"code":814,"language":225,"meta":226,"style":226},"node -v\npm2 jlist | grep -o '\"node_version\":\"[^\"]*\"' | sort -u   # si usas PM2\ndocker exec \u003Ccontenedor> node -v                          # si va en Docker\n",[185,816,817,824,855],{"__ignoreMap":226},[230,818,819,822],{"class":232,"line":233},[230,820,821],{"class":236},"node",[230,823,241],{"class":240},[230,825,826,829,832,835,838,841,844,846,849,852],{"class":232,"line":244},[230,827,828],{"class":236},"pm2",[230,830,831],{"class":285}," jlist",[230,833,834],{"class":289}," |",[230,836,837],{"class":236}," grep",[230,839,840],{"class":240}," -o",[230,842,843],{"class":285}," '\"node_version\":\"[^\"]*\"'",[230,845,834],{"class":289},[230,847,848],{"class":236}," sort",[230,850,851],{"class":240}," -u",[230,853,854],{"class":253},"   # si usas PM2\n",[230,856,858,860,862,864,866,868,870,873,875],{"class":232,"line":857},3,[230,859,282],{"class":236},[230,861,286],{"class":285},[230,863,290],{"class":289},[230,865,293],{"class":285},[230,867,297],{"class":296},[230,869,300],{"class":289},[230,871,872],{"class":285}," node",[230,874,250],{"class":240},[230,876,877],{"class":253},"                          # si va en Docker\n",[126,879,881],{"id":880},"_2-actualiza-a-la-versión-corregida-de-tu-rama","2. Actualiza a la versión corregida de tu rama",[53,883,884,893,901],{},[56,885,886,889,890],{},[23,887,888],{},"26.x"," → ",[23,891,892],{},"26.12.1",[56,894,895,889,898],{},[23,896,897],{},"24.x",[23,899,900],{},"24.22.1",[56,902,903,889,906],{},[23,904,905],{},"22.x",[23,907,908],{},"22.23.4",[19,910,911,912,915,916,919,920,923,924,72,926,929],{},"Con nvm, ",[185,913,914],{},"nvm install 22.23.4"," (o tu rama) y reinicia la aplicación. Con los paquetes de NodeSource, ",[185,917,918],{},"sudo apt update && sudo apt upgrade nodejs",". En Docker, igual que con PHP: si la etiqueta es flotante (",[185,921,922],{},"node:22-bookworm-slim","), ",[185,925,655],{},[185,927,928],{},"up -d","; si es fija, cambia el Dockerfile.",[126,931,933],{"id":932},"_3-reinicia-y-comprueba","3. Reinicia y comprueba",[19,935,936,937,344,940,943,944,947],{},"Node no se actualiza en caliente: el proceso que está corriendo sigue siendo el viejo hasta que lo reinicias (",[185,938,939],{},"pm2 restart",[185,941,942],{},"systemctl restart"," o recrear el contenedor). Después, ",[185,945,946],{},"node -v"," dentro del mismo entorno en el que corre la aplicación.",[14,949,951],{"id":950},"cómo-lo-enfocamos-nosotros","Cómo lo enfocamos nosotros",[19,953,954,955,958,959,962],{},"Un día así se gana o se pierde ",[23,956,957],{},"antes"," de que salga el parche. Lo que más tiempo ahorra es tener ",[23,960,961],{},"inventario",": saber qué servidores tienen PHP o Node, con qué versión exacta, si va en Docker con etiqueta flotante o fija, y si es mod_php o PHP-FPM. Con eso delante, \"¿me afecta?\" se contesta en minutos, y el parche se convierte en una lista de tareas en vez de una tarde de SSH a ciegas.",[19,964,965,966,969],{},"La otra lección es la de siempre: ",[23,967,968],{},"los PHP fuera de soporte",". Un 7.2 o un 7.4 que \"funciona bien\" no recibe el parche oficial. Hoy es php2shell; mañana será otro. Si tienes uno de esos, el día de planificar la migración era ayer.",[19,971,972],{},"Si no sabes qué versión de PHP o de Node corre en tus servidores, o tienes alguno que ya no tiene soporte y no sabes por dónde empezar, hablamos.",[14,974,976],{"id":975},"referencias","Referencias",[53,978,979,986,993,1000,1007,1014,1021,1028,1035,1042,1048,1055],{},[56,980,981],{},[681,982,985],{"href":983,"rel":984},"https:\u002F\u002Fwww.php.net\u002Farchive\u002F2026.php#2026-10-21-5",[685],"Security advisory: Critical remote code execution vulnerabilities, update now — php.net (21-oct-2026)",[56,987,988],{},[681,989,992],{"href":990,"rel":991},"https:\u002F\u002Fwww.php.net\u002FChangeLog-8.php",[685],"PHP 8 ChangeLog — php.net",[56,994,995],{},[681,996,999],{"href":997,"rel":998},"https:\u002F\u002Fnodejs.org\u002Fen\u002Fblog\u002Fvulnerability\u002Foctober-2026-security-releases",[685],"Wednesday, October 21, 2026 Security Releases — nodejs.org",[56,1001,1002],{},[681,1003,1006],{"href":1004,"rel":1005},"https:\u002F\u002Fhadrian.io\u002Fvulnerability-alerts\u002Fphp2shell-leaked-critical-php-rce-cve-2026-109618-cve-2026-109619",[685],"php2shell: What we know about the leaked critical PHP RCEs — Hadrian",[56,1008,1009],{},[681,1010,1013],{"href":1011,"rel":1012},"https:\u002F\u002Fwatchtowr.com\u002Fintelligence\u002Fphp-remote-code-execution-php2shell\u002F",[685],"CVE-2026-109619: PHP Remote Code Execution Exploited — watchTowr",[56,1015,1016],{},[681,1017,1020],{"href":1018,"rel":1019},"https:\u002F\u002Fblog.cloudflare.com\u002Fphp-vulnerabilities-waf-protection\u002F",[685],"Cloudflare deploys protections against php2shell vulnerability — Cloudflare",[56,1022,1023],{},[681,1024,1027],{"href":1025,"rel":1026},"https:\u002F\u002Fthehackernews.com\u002F2026\u002F10\u002Fphp-issues-emergency-patches-for-two.html",[685],"PHP Issues Emergency Patches for Two Critical PHP2Shell RCE Flaws — The Hacker News",[56,1029,1030],{},[681,1031,1034],{"href":1032,"rel":1033},"https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fphp-warns-admins-of-two-critical-flaws-emergency-patches-coming-tomorrow\u002F",[685],"PHP warns admins of two critical flaws — BleepingComputer",[56,1036,1037],{},[681,1038,1041],{"href":1039,"rel":1040},"https:\u002F\u002Fwww.cisa.gov\u002Fknown-exploited-vulnerabilities-catalog",[685],"Known Exploited Vulnerabilities Catalog — CISA",[56,1043,1044],{},[681,1045,1047],{"href":683,"rel":1046},[685],"NCSC-NL\u002Fphp2shell: información operativa sobre las vulnerabilidades php2shell — GitHub",[56,1049,1050],{},[681,1051,1054],{"href":1052,"rel":1053},"https:\u002F\u002Fwatchtowr.com\u002Fintelligence\u002Fphp-cve-2026-109618-faq\u002F",[685],"PHP RCE FAQ: PHP2Shell CVE-2026-109618 & CVE-2026-109619 — watchTowr",[56,1056,1057],{},[681,1058,1061],{"href":1059,"rel":1060},"https:\u002F\u002Fwww.precursorsecurity.com\u002Fblog\u002Fphp2shell-critical-php-rce-vulnerabilities",[685],"Live Blog: PHP2Shell Critical PHP RCE Vulnerabilities — Precursor Security",[1063,1064,1065],"style",{},"html pre.shiki code .s_sBn, html code.shiki .s_sBn{--shiki-default:#FFB757}html pre.shiki code .sCcAr, html code.shiki .sCcAr{--shiki-default:#91CBFF}html pre.shiki code .sQrFR, html code.shiki .sQrFR{--shiki-default:#BDC4CC}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 .sTRMh, html code.shiki .sTRMh{--shiki-default:#ADDCFF}html pre.shiki code .sWyjQ, html code.shiki .sWyjQ{--shiki-default:#FF9492}html pre.shiki code .sMAXC, html code.shiki .sMAXC{--shiki-default:#F0F3F6}",{"title":226,"searchDepth":244,"depth":244,"links":1067},[1068,1069,1070,1074,1081,1085,1089,1094,1095],{"id":16,"depth":244,"text":17},{"id":50,"depth":244,"text":51},{"id":91,"depth":244,"text":92,"children":1071},[1072,1073],{"id":128,"depth":857,"text":129},{"id":167,"depth":857,"text":168},{"id":214,"depth":244,"text":215,"children":1075},[1076,1077,1078,1079,1080],{"id":218,"depth":857,"text":219},{"id":308,"depth":857,"text":309},{"id":404,"depth":857,"text":405},{"id":458,"depth":857,"text":459},{"id":498,"depth":857,"text":499},{"id":579,"depth":244,"text":580,"children":1082},[1083,1084],{"id":626,"depth":857,"text":627},{"id":675,"depth":857,"text":676},{"id":710,"depth":244,"text":711,"children":1086},[1087,1088],{"id":766,"depth":857,"text":767},{"id":792,"depth":857,"text":793},{"id":806,"depth":244,"text":807,"children":1090},[1091,1092,1093],{"id":810,"depth":857,"text":811},{"id":880,"depth":857,"text":881},{"id":932,"depth":857,"text":933},{"id":950,"depth":244,"text":951},{"id":975,"depth":244,"text":976},"2026-10-21","PHP ha publicado 8.5.12, 8.4.27, 8.3.36 y 8.2.35 para cerrar dos fallos críticos que permiten ejecutar código sin autenticarse, y el mismo día Node.js sacó 26.12.1, 24.22.1 y 22.23.4 con un fallo en el descompresor Brotli que también permite ejecutar código. Qué se sabe, a quién afecta y qué tienes que hacer hoy.","md","\u002Fog\u002Fog-default.png",{},true,"php2shell-php-nodejs-security-patches-october-2026","\u002Fes\u002Fblog\u002Fphp2shell-php-nodejs-parches-seguridad-octubre-2026",{"title":8,"description":1097},false,"es\u002Fblog\u002Fphp2shell-php-nodejs-parches-seguridad-octubre-2026",[25,29,1108,1109,1110,1111],"Seguridad","CVE","Servidores","Docker","VUDnvdEhzKT0mezhDmIOacZ36LDskVPv9LhICowvthw",1792647976628]