[{"data":1,"prerenderedAt":564},["ShallowReactive",2],{"switcher-blog-pareja":3,"art-nginx-cve-2026-90439-http3-openssl-es":6},{"es":4,"en":5},"\u002Fes\u002Fblog\u002Fnginx-cve-2026-90439-http3-openssl\u002F","\u002Fen\u002Fblog\u002Fnginx-cve-2026-90439-http3-openssl-buffer-overflow\u002F",{"id":7,"title":8,"author":9,"body":10,"date":547,"description":548,"extension":549,"image":550,"meta":551,"navigation":375,"pareja":552,"path":553,"seo":554,"sin_cta":555,"stem":556,"tags":557,"__hash__":563},"blogEs\u002Fes\u002Fblog\u002Fnginx-cve-2026-90439-http3-openssl.md","Nginx 1.30.5 y 1.31.6: el desbordamiento de HTTP\u002F3 (CVE-2026-90439) y cómo saber en dos comandos si te afecta","Paco Cubel",{"type":11,"value":12,"toc":533},"minimark",[13,18,40,47,51,82,86,128,135,139,146,183,186,190,195,230,233,247,251,280,283,287,307,414,421,425,428,455,458,462,469,484,487,491,529],[14,15,17],"h2",{"id":16},"otra-vez-http3","Otra vez HTTP\u002F3",[19,20,21,22,26,27,30,31,34,35,39],"p",{},"El 15 de septiembre nginx publicó ",[23,24,25],"strong",{},"1.30.5"," (stable) y ",[23,28,29],{},"1.31.6"," (mainline). Las dos llegan con un único motivo de urgencia: el ",[23,32,33],{},"CVE-2026-90439",", un desbordamiento de búfer en ",[36,37,38],"code",{},"ngx_http_v3_module",", el módulo que da soporte a HTTP\u002F3.",[19,41,42,43,46],{},"La buena noticia es que esta vez el fallo ",[23,44,45],{},"no es universal",". La mala, que si usas HTTP\u002F3 —y cada vez más gente lo activa porque el navegador lo agradece— conviene que lo mires hoy y no \"cuando toque\".",[14,48,50],{"id":49},"en-una-frase","En una frase",[19,52,53,54,57,58,61,62,65,66,69,70,73,74,77,78,81],{},"Con ",[23,55,56],{},"HTTP\u002F3 activado"," y nginx enlazado contra ",[23,59,60],{},"OpenSSL 3.5.0 o anterior",", un atacante remoto y sin credenciales puede provocar, durante el saludo TLS, un ",[23,63,64],{},"desbordamiento limitado de memoria"," en un worker, que acaba ",[23,67,68],{},"reiniciándolo"," y puede corromper algún dato. Gravedad ",[23,71,72],{},"media",": CVSS ",[23,75,76],{},"6.5"," en la escala v3.1 y ",[23,79,80],{},"6.9"," en v4.0, según la propia F5.",[14,83,85],{"id":84},"qué-se-sabe-del-fallo","Qué se sabe del fallo",[87,88,89,96,106,112,118],"ul",{},[90,91,92,95],"li",{},[23,93,94],{},"Dónde está",": en el procesamiento del saludo TLS de las conexiones HTTP\u002F3 (QUIC).",[90,97,98,101,102,105],{},[23,99,100],{},"Qué provoca",": reinicios del worker y, como mucho, corrupción de datos limitada. F5 no le atribuye fuga de información ni ejecución de código, y precisa que el efecto ",[23,103,104],{},"no es determinista"," ni lo controla el atacante.",[90,107,108,111],{},[23,109,110],{},"Qué no toca",": solo el plano de datos. No hay exposición del plano de control.",[90,113,114,117],{},[23,115,116],{},"Quién lo encontró",": Banny Liao, según el registro de cambios de nginx.",[90,119,120,123,124,127],{},[23,121,122],{},"¿Se está explotando?"," A día de hoy no hay constancia de explotación ni de prueba de concepto pública. Pero el análisis de CISA lo marca como ",[23,125,126],{},"automatizable",": no hace falta nada del otro mundo para lanzarlo en masa contra servidores expuestos.",[19,129,130,131,134],{},"Además del parche, las dos versiones cambian un comportamiento: ",[23,132,133],{},"la extensión de parámetros de transporte de QUIC que llega en una conexión SSL normal ahora se ignora siempre",". La mainline 1.31.6 trae también varias correcciones de errores sin relación con la seguridad.",[14,136,138],{"id":137},"a-quién-afecta","A quién afecta",[19,140,141,142,145],{},"Se tienen que dar ",[23,143,144],{},"las dos condiciones a la vez",":",[147,148,149,167],"ol",{},[90,150,151,154,155,158,159,162,163,166],{},[23,152,153],{},"Versión vulnerable",": de la ",[23,156,157],{},"1.29.2 a la 1.31.5",". En la rama stable eso incluye las 1.30.x anteriores a la 1.30.5. NGINX Plus también está afectado; el arreglo está en ",[23,160,161],{},"37.1.1.2"," y ",[23,164,165],{},"37.0.6.2",".",[90,168,169,171,172,175,176,179,180,166],{},[23,170,56],{}," (alguna directiva ",[36,173,174],{},"listen"," con ",[36,177,178],{},"quic",") ",[23,181,182],{},"y OpenSSL 3.5.0 o anterior",[19,184,185],{},"Si tu nginx es anterior a la 1.29.2, el código vulnerable no está. Es lo habitual en los paquetes de las distribuciones estables, que suelen ir varias versiones por detrás; aun así, compruébalo en vez de suponerlo. Y si no usas HTTP\u002F3, este fallo no te alcanza aunque tu versión esté en el rango.",[14,187,189],{"id":188},"qué-tienes-que-hacer-hoy","Qué tienes que hacer hoy",[191,192,194],"h3",{"id":193},"_1-mira-versión-y-openssl","1. Mira versión y OpenSSL",[196,197,202],"pre",{"className":198,"code":199,"language":200,"meta":201,"style":201},"language-bash shiki shiki-themes github-dark-high-contrast","nginx -V 2>&1 | head -3\n","bash","",[36,203,204],{"__ignoreMap":201},[205,206,209,213,217,221,224,227],"span",{"class":207,"line":208},"line",1,[205,210,212],{"class":211},"s_sBn","nginx",[205,214,216],{"class":215},"sCcAr"," -V",[205,218,220],{"class":219},"sWyjQ"," 2>&1",[205,222,223],{"class":219}," |",[205,225,226],{"class":211}," head",[205,228,229],{"class":215}," -3\n",[19,231,232],{},"La primera línea te dice la versión de nginx, y otra de las líneas, la de OpenSSL con la que se compiló (\"built with OpenSSL…\"). Comprueba también la que tiene el sistema:",[196,234,236],{"className":198,"code":235,"language":200,"meta":201,"style":201},"openssl version\n",[36,237,238],{"__ignoreMap":201},[205,239,240,243],{"class":207,"line":208},[205,241,242],{"class":211},"openssl",[205,244,246],{"class":245},"sTRMh"," version\n",[191,248,250],{"id":249},"_2-mira-si-tienes-http3-activado","2. Mira si tienes HTTP\u002F3 activado",[196,252,254],{"className":198,"code":253,"language":200,"meta":201,"style":201},"nginx -T 2>\u002Fdev\u002Fnull | grep -E \"listen.*quic|http3\"\n",[36,255,256],{"__ignoreMap":201},[205,257,258,260,263,266,269,271,274,277],{"class":207,"line":208},[205,259,212],{"class":211},[205,261,262],{"class":215}," -T",[205,264,265],{"class":219}," 2>",[205,267,268],{"class":245},"\u002Fdev\u002Fnull",[205,270,223],{"class":219},[205,272,273],{"class":211}," grep",[205,275,276],{"class":215}," -E",[205,278,279],{"class":245}," \"listen.*quic|http3\"\n",[19,281,282],{},"Si no sale nada, no tienes HTTP\u002F3 activado y puedes respirar tranquilo con este CVE (y actualizar igualmente en tu siguiente ventana).",[191,284,286],{"id":285},"_3-si-te-afecta-actualiza-y-recarga-sin-cortar-el-servicio","3. Si te afecta: actualiza y recarga sin cortar el servicio",[87,288,289,299],{},[90,290,291,292,295,296,166],{},"Rama ",[23,293,294],{},"stable",": el objetivo es ",[23,297,298],{},"1.30.5 o superior",[90,300,291,301,295,304,166],{},[23,302,303],{},"mainline",[23,305,306],{},"1.31.6 o superior",[196,308,310],{"className":198,"code":309,"language":200,"meta":201,"style":201},"# Debian \u002F Ubuntu (repositorio oficial de nginx.org)\nsudo apt update && sudo apt install --only-upgrade nginx\nsudo nginx -t && sudo systemctl reload nginx\n\n# RHEL \u002F AlmaLinux \u002F Rocky\nsudo dnf update nginx\nsudo nginx -t && sudo systemctl reload nginx\n",[36,311,312,318,347,370,377,383,395],{"__ignoreMap":201},[205,313,314],{"class":207,"line":208},[205,315,317],{"class":316},"sQrFR","# Debian \u002F Ubuntu (repositorio oficial de nginx.org)\n",[205,319,321,324,327,330,334,336,338,341,344],{"class":207,"line":320},2,[205,322,323],{"class":211},"sudo",[205,325,326],{"class":245}," apt",[205,328,329],{"class":245}," update",[205,331,333],{"class":332},"sMAXC"," && ",[205,335,323],{"class":211},[205,337,326],{"class":245},[205,339,340],{"class":245}," install",[205,342,343],{"class":215}," --only-upgrade",[205,345,346],{"class":245}," nginx\n",[205,348,350,352,355,358,360,362,365,368],{"class":207,"line":349},3,[205,351,323],{"class":211},[205,353,354],{"class":245}," nginx",[205,356,357],{"class":215}," -t",[205,359,333],{"class":332},[205,361,323],{"class":211},[205,363,364],{"class":245}," systemctl",[205,366,367],{"class":245}," reload",[205,369,346],{"class":245},[205,371,373],{"class":207,"line":372},4,[205,374,376],{"emptyLinePlaceholder":375},true,"\n",[205,378,380],{"class":207,"line":379},5,[205,381,382],{"class":316},"# RHEL \u002F AlmaLinux \u002F Rocky\n",[205,384,386,388,391,393],{"class":207,"line":385},6,[205,387,323],{"class":211},[205,389,390],{"class":245}," dnf",[205,392,329],{"class":245},[205,394,346],{"class":245},[205,396,398,400,402,404,406,408,410,412],{"class":207,"line":397},7,[205,399,323],{"class":211},[205,401,354],{"class":245},[205,403,357],{"class":215},[205,405,333],{"class":332},[205,407,323],{"class":211},[205,409,364],{"class":245},[205,411,367],{"class":245},[205,413,346],{"class":245},[19,415,416,417,420],{},"Y después, ",[36,418,419],{},"nginx -v"," otra vez. Lo que no se comprueba no está hecho.",[191,422,424],{"id":423},"_4-si-hoy-no-puedes-actualizar","4. Si hoy no puedes actualizar",[19,426,427],{},"F5 propone dos apaños temporales:",[87,429,430,442],{},[90,431,432,435,436,438,439,441],{},[23,433,434],{},"Desactivar HTTP\u002F3"," quitando ",[36,437,178],{}," de las directivas ",[36,440,174],{},". Los navegadores volverán a HTTP\u002F2 sin que el usuario note nada más que una pizca de latencia.",[90,443,444,445,451,452,454],{},"O bien ",[23,446,447,448],{},"activarlo en todos los bloques ",[36,449,450],{},"server"," que comparten configuración, añadiendo ",[36,453,178],{}," a todos ellos. F5 no detalla el motivo; si te decides por esta vía, pruébala antes en un entorno que no sea producción.",[19,456,457],{},"Lo primero es lo más sencillo y lo más seguro. Lo segundo, mejor dejarlo para quien ya sepa por qué lo hace.",[14,459,461],{"id":460},"cómo-lo-enfocamos-nosotros","Cómo lo enfocamos nosotros",[19,463,464,465,468],{},"Este es el tipo de CVE donde más ayuda tener ",[23,466,467],{},"inventario",": saber de antemano qué servidores tienen HTTP\u002F3 y con qué OpenSSL se compiló cada nginx. Con eso, la pregunta \"¿me afecta?\" se contesta en minutos y no en una tarde de SSH servidor por servidor.",[19,470,471,472,477,478,480,481,483],{},"Y una idea que conviene tener presente: el código de HTTP\u002F3 es mucho más joven que el de HTTP\u002F1.1 o HTTP\u002F2. No es razón para no usarlo —ya contamos ",[473,474,476],"a",{"href":475},"\u002Fes\u002Fblog\u002Fnginx-http3-quic-2026","cuándo merece la pena activarlo","—, pero sí para tratar el ",[36,479,178],{}," del ",[36,482,174],{}," como algo que se activa sabiendo que hay que vigilarlo.",[19,485,486],{},"Si no sabes qué versión de nginx corre en tu servidor, ni si tiene HTTP\u002F3 activado, hablamos.",[14,488,490],{"id":489},"referencias","Referencias",[87,492,493,501,508,515,522],{},[90,494,495],{},[473,496,500],{"href":497,"rel":498},"https:\u002F\u002Fnginx.org\u002Fen\u002Fsecurity_advisories.html",[499],"nofollow","nginx security advisories — nginx.org",[90,502,503],{},[473,504,507],{"href":505,"rel":506},"https:\u002F\u002Fnginx.org\u002Fen\u002FCHANGES",[499],"nginx CHANGES (1.31.6) — nginx.org",[90,509,510],{},[473,511,514],{"href":512,"rel":513},"https:\u002F\u002Fnginx.org\u002Fen\u002FCHANGES-1.30",[499],"nginx CHANGES-1.30 (1.30.5) — nginx.org",[90,516,517],{},[473,518,521],{"href":519,"rel":520},"https:\u002F\u002Fmy.f5.com\u002Fmanage\u002Fs\u002Farticle\u002FK000162604",[499],"NGINX vulnerability CVE-2026-90439 — F5 (K000162604)",[90,523,524],{},[473,525,528],{"href":526,"rel":527},"https:\u002F\u002Fnvd.nist.gov\u002Fvuln\u002Fdetail\u002FCVE-2026-90439",[499],"CVE-2026-90439 — NVD",[530,531,532],"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 .sWyjQ, html code.shiki .sWyjQ{--shiki-default:#FF9492}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 .sQrFR, html code.shiki .sQrFR{--shiki-default:#BDC4CC}html pre.shiki code .sMAXC, html code.shiki .sMAXC{--shiki-default:#F0F3F6}",{"title":201,"searchDepth":320,"depth":320,"links":534},[535,536,537,538,539,545,546],{"id":16,"depth":320,"text":17},{"id":49,"depth":320,"text":50},{"id":84,"depth":320,"text":85},{"id":137,"depth":320,"text":138},{"id":188,"depth":320,"text":189,"children":540},[541,542,543,544],{"id":193,"depth":349,"text":194},{"id":249,"depth":349,"text":250},{"id":285,"depth":349,"text":286},{"id":423,"depth":349,"text":424},{"id":460,"depth":320,"text":461},{"id":489,"depth":320,"text":490},"2026-09-15","Nginx ha publicado versiones que corrigen un desbordamiento de búfer en el módulo de HTTP\u002F3, con gravedad media. Solo afecta a quien tiene HTTP\u002F3 activado y compila contra OpenSSL 3.5.0 o anterior, pero si es tu caso un atacante puede tumbar workers sin autenticarse. Te contamos cómo comprobarlo y qué hacer.","md","\u002Fog\u002Fog-default.png",{},"nginx-cve-2026-90439-http3-openssl-buffer-overflow","\u002Fes\u002Fblog\u002Fnginx-cve-2026-90439-http3-openssl",{"title":8,"description":548},false,"es\u002Fblog\u002Fnginx-cve-2026-90439-http3-openssl",[558,559,560,561,562],"Nginx","Servidores","Seguridad","CVE","HTTP\u002F3","c23-4Yomi7FC-go84YaO4FsK-PL8lTDS6RDvg5XeCCI",1792647976630]