{"id":68082,"date":"2026-09-09T11:36:22","date_gmt":"2026-09-09T11:36:22","guid":{"rendered":"https:\/\/overcentral.com\/es\/?p=68082"},"modified":"2026-09-09T11:36:22","modified_gmt":"2026-09-09T11:36:22","slug":"cve-2025-50165-ejecucion-remota-jpg-68082","status":"publish","type":"post","link":"https:\/\/overcentral.com\/es\/cve-2025-50165-ejecucion-remota-jpg-68082\/","title":{"rendered":"CVE-2025-50165 permite ejecutar c\u00f3digo remoto al abrir un archivo JPG"},"content":{"rendered":"<p>En noviembre <a href=\"https:\/\/overcentral.com\/es\/123456-un-ano-mas-lidera-las-contrasenas-mas-predecibles-de-2025\/\" title=\"123456 un a\u00f1o m\u00e1s lidera las contrase\u00f1as m\u00e1s predecibles de 2025\" data-iacss-internal=\"1\">de 2025<\/a>, una vulnerabilidad clasificada como cr\u00edtica por <a href=\"https:\/\/www.microsoft.com\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Microsoft<\/a> y documentada inicialmente por <a href=\"https:\/\/www.zscaler.com\/threatlabz\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Zscaler ThreatLabz<\/a> sacudi\u00f3 la confianza en uno de los formatos de imagen m\u00e1s ubicuos de la web: el JPG. La CVE\u20112025\u201150165, alojada en la biblioteca <em>WindowsCodecs.dll<\/em>, promet\u00eda la capacidad de ejecutar c\u00f3digo remoto con solo abrir un archivo JPG especialmente manipulado. Sin embargo, tras un an\u00e1lisis forense de causa ra\u00edz realizado por investigadores de <a href=\"https:\/\/overcentral.com\/es\/eset-participa-en-la-operacion-endgame-para-desmantelar-amadey-y-stealc\/\" title=\"ESET participa en la Operaci\u00f3n Endgame para desmantelar Amadey y Stealc\" data-iacss-internal=\"1\">ESET<\/a>, el escenario real de explotaci\u00f3n result\u00f3 ser considerablemente m\u00e1s complejo de lo que suger\u00eda la descripci\u00f3n inicial. Este art\u00edculo desglosa el hallazgo, el mecanismo del fallo, las condiciones necesarias para desencadenarlo y una evaluaci\u00f3n ponderada de su verdadero riesgo para los usuarios de Windows.<\/p>\n<h2>El descubrimiento: una vulnerabilidad cr\u00edtica en el componente de im\u00e1genes de Windows<\/h2>\n<p>El 20 de noviembre de 2025, Zscaler ThreatLabz public\u00f3 un informe detallando CVE\u20112025\u201150165, una vulnerabilidad de ejecuci\u00f3n remota de c\u00f3digo presente en <code>WindowsCodecs.dll<\/code>codecodecodecodecode, la biblioteca principal de Windows para el manejo de formatos de imagen comunes como JPG, PNG, GIF y BMP. Microsoft, en su propia descripci\u00f3n, se\u00f1al\u00f3 que el fallo se originaba en la desreferencia de un puntero a funci\u00f3n no inicializado dentro de la funci\u00f3n <code>jpeg_finish_compress<\/code>codecodecodecodecode, perteneciente a la biblioteca <em>libjpeg\u2011turbo<\/em> (versi\u00f3n 3.0.2) integrada en el sistema. La gravedad fue calificada como cr\u00edtica, pero la probabilidad de explotaci\u00f3n se consider\u00f3 baja. Esta aparente contradicci\u00f3n despert\u00f3 el inter\u00e9s de los investigadores de <a href=\"https:\/\/www.eset.com\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">ESET<\/a>, quienes se propusieron aclarar las condiciones exactas del fallo.<\/p>\n<p>El equipo de ESET descarg\u00f3 y analiz\u00f3 la versi\u00f3n vulnerable de <code>WindowsCodecs.dll<\/code>codecodecodecodecode (10.0.26100.4768, SHA\u20111: 5887D96565749067564BABCD3DC5D107AB6666BD) y la compar\u00f3 con la primera versi\u00f3n parcheada (10.0.26100.4946, SHA\u20111: 4EC1DC0431432BC318E78C520387911EC44F84FC). Utilizando la herramienta de diffing binario Diaphora, identificaron los cambios clave que permitieron comprender la causa ra\u00edz del problema.<\/p>\n<h2>El punto de fallo: por qu\u00e9 un JPG de 12 bits desencadena el crash<\/h2>\n<p>La funci\u00f3n <code>jpeg_finish_compress<\/code>codecodecodecodecode es llamada cuando una secuencia de imagen JPG se comprime o se vuelve a codificar. Dentro de esta funci\u00f3n, el crash ocurre en la direcci\u00f3n <code>jpeg_finish_compress+0xCC<\/code>codecodecodecodecode, correspondiente a la l\u00ednea donde se desreferencia un puntero a funci\u00f3n almacenado en el campo <code>compress_data_12<\/code>codecodecodecodecode de una estructura interna. Para que este camino de c\u00f3digo se ejecute, el miembro <code>data_precision<\/code>codecodecodecodecode de la estructura <code>jpeg_compress_struct<\/code>codecodecodecodecode debe estar establecido en 12. En t\u00e9rminos simples, <code>WindowsCodecs.dll<\/code>codecodecodecodecode falla cuando intenta codificar una imagen JPG con una profundidad de color de 12 bits (bit depth), en lugar de los 8 bits convencionales.<\/p>\n<p>El an\u00e1lisis con Diaphora revel\u00f3 que la funci\u00f3n <code>jinit_c_rawtranscode_coef_controller_turbo<\/code>codecodecodecodecode \u2014 que hab\u00eda sido inlineada en la versi\u00f3n vulnerable \u2014 no inicializaba los punteros <code>compress_data_12<\/code>codecodecodecodecode ni <code>compress_data_16<\/code>codecodecodecodecode. En la versi\u00f3n parcheada, ambos punteros se asignan a una funci\u00f3n stub llamada <code>rawtranscode_compress_output_16<\/code>codecodecodecodecode, que simplemente delega en una funci\u00f3n gen\u00e9rica <code>rawtranscode_compress_output<\/code>codecodecodecodecode. Esto indica que no existe una implementaci\u00f3n espec\u00edfica para manejar im\u00e1genes JPG de 12 o 16 bits; el parche se limita a evitar la desreferencia de un puntero sin inicializar.<\/p>\n<h2>Reproduciendo el crash: im\u00e1genes de 12 y 16 bits confirman el fallo<\/h2>\n<p>ESET reprodujo el crash utilizando el ejemplo de re\u2011codificaci\u00f3n JPG proporcionado por Microsoft en su documentaci\u00f3n de WIC (<em>Windows Imaging Component<\/em>). Alimentando ese programa con una imagen de prueba de 12 bits disponible en el repositorio de <em>libjpeg\u2011turbo<\/em> (<code>testorig12.jpg<\/code>codecodecodecodecode), la aplicaci\u00f3n se bloque\u00f3 exactamente en la misma direcci\u00f3n se\u00f1alada por Zscaler. La memoria apuntada por el puntero no inicializado conten\u00eda el valor repetido <code>0xBAADF00D<\/code>codecodecodecodecode, una marca m\u00e1gica que el CRT de Windows asigna a memoria reci\u00e9n asignada por <code>HeapAlloc<\/code>codecodecodecodecode para indicar que no ha sido inicializada.<\/p>\n<p>La misma prueba con una imagen JPG de 16 bits tambi\u00e9n provoc\u00f3 un crash, esta vez al desreferenciar el puntero <code>compress_data_16<\/code>codecodecodecodecode. Esto confirm\u00f3 que ambas rutas de c\u00f3digo \u2014 para 12 y 16 bits \u2014 eran vulnerables.<\/p>\n<h3>Condiciones exactas para desencadenar el fallo<\/h3>\n<p>La pregunta clave que se hicieron los investigadores fue: \u00bfbajo qu\u00e9 circunstancias reales puede un usuario o un proceso llamar a <code>jpeg_finish_compress<\/code>codecodecodecodecode con un JPG de alta precisi\u00f3n? La respuesta no es trivial. La funci\u00f3n vulnerable solo se invoca cuando una imagen se vuelve a codificar (<em>re\u2011encode<\/em>), no durante la simple decodificaci\u00f3n y visualizaci\u00f3n. Esto ocurre, por ejemplo, al guardar una imagen editada, al crear una miniatura (thumbnail) o al realizar operaciones de metadatos que requieren re\u2011compresi\u00f3n. La aplicaci\u00f3n Microsoft Photos, por ejemplo, llama a <code>jpeg_finish_compress<\/code>codecodecodecodecode al generar miniaturas, como demostr\u00f3 ESET mediante un punto de interrupci\u00f3n (<em>breakpoint<\/em>).<\/p>\n<p>Por lo tanto, para que un sistema sea vulnerable, deben cumplirse tres condiciones:\n<\/p>\n<ul>\n<li>Que utilice una versi\u00f3n afectada de <code>WindowsCodecs.dll<\/code>codecodecodecodecode.<\/li>\n<li>Que la aplicaci\u00f3n hu\u00e9sped no falle ni aborte al decodificar un JPG de 12 o 16 bits antes de intentar re\u2011codificarlo.<\/li>\n<li>Que la aplicaci\u00f3n permita (voluntaria o autom\u00e1ticamente) la re\u2011codificaci\u00f3n de la imagen.<\/li>\n<\/ul>\n<p>Esta cadena de eventos reduce dr\u00e1sticamente la superficie de ataque en comparaci\u00f3n con una vulnerabilidad que se dispara solo con la apertura del archivo.<\/p>\n<h2>\u00bfEstaba tambi\u00e9n vulnerable el c\u00f3digo fuente de libjpeg\u2011turbo?<\/h2>\n<p>ESET examin\u00f3 el repositorio de <em>libjpeg\u2011turbo<\/em> y encontr\u00f3 que el commit <code>e0e18de<\/code>codecodecodecodecode, fechado el 18 de diciembre de 2024 e incluido en la versi\u00f3n 3.1.1, resolv\u00eda exactamente este tipo de problemas: las estructuras ahora se inicializan con ceros y se verifica que los punteros no sean nulos antes de usarlos. Sin embargo, ninguna de estas medidas de seguridad estaba presente en la versi\u00f3n 3.0.2 incorporada en <code>WindowsCodecs.dll<\/code>codecodecodecodecode. El mensaje del commit tambi\u00e9n advierte que el fallo puede ocurrir tanto en la compresi\u00f3n como en la descompresi\u00f3n, pero <strong>solo si<\/strong> una aplicaci\u00f3n modifica el campo <code>data_precision<\/code>codecodecodecodecode despu\u00e9s de llamar a <code>jpeg_start_compress<\/code>codecodecodecodecode o <code>jpeg_start_decompress<\/code>codecodecodecodecode. La API de Windows Imaging Component no expone este comportamiento, lo que hace improbable que una aplicaci\u00f3n leg\u00edtima pueda alterar ese estado interno.<\/p>\n<h2>Evaluaci\u00f3n real de la explotabilidad: por qu\u00e9 Microsoft la calific\u00f3 como poco probable<\/h2>\n<p>El an\u00e1lisis de ESET concluye que la explotabilidad de CVE\u20112025\u201150165 es, efectivamente, reducida. Para que un atacante logre ejecuci\u00f3n remota de c\u00f3digo, necesitar\u00eda:<\/p>\n<ul>\n<li>Provocar que una aplicaci\u00f3n vulnerable re\u2011codifique un JPG de 12 o 16 bits.<\/li>\n<li>Tener capacidad de filtrar direcciones de memoria (<em>address leak<\/em>) para conocer la disposici\u00f3n del heap.<\/li>\n<li>Ejercer un control fino sobre la asignaci\u00f3n de memoria para colocar un payload en la ubicaci\u00f3n donde se espera el puntero a funci\u00f3n.<\/li>\n<\/ul>\n<p>Estas condiciones hacen que la explotaci\u00f3n en escenarios reales sea compleja, aunque no imposible. ESET coincide con la evaluaci\u00f3n de Microsoft: la vulnerabilidad es cr\u00edtica en teor\u00eda (podr\u00eda permitir ejecuci\u00f3n de c\u00f3digo) pero su explotabilidad es poco probable debido a los requisitos previos. No obstante, advierte que aplicaciones espec\u00edficas que realicen procesamiento masivo de miniaturas o re\u2011codificaci\u00f3n autom\u00e1tica de im\u00e1genes podr\u00edan ser vectores de ataque potenciales, especialmente si el atacante consigue que el usuario abra una imagen maliciosa en un explorador de archivos o visor que genere thumbnails.<\/p>\n<h2>Implicaciones para el ecosistema Windows: lecciones sobre el uso de bibliotecas de terceros<\/h2>\n<p>M\u00e1s all\u00e1 de la vulnerabilidad concreta, este caso subraya un problema recurrente en la seguridad del software: la integraci\u00f3n de bibliotecas de c\u00f3digo abierto sin mantenerlas actualizadas. <code>WindowsCodecs.dll<\/code>codecodecodecodecode utiliza <em>libjpeg\u2011turbo<\/em> 3.0.2, lanzada en enero de 2024, pero el commit correctivo (3.1.1) es de diciembre de 2024 y no fue incorporado hasta el parche de noviembre de 2025. Ese desfase de casi un a\u00f1o dej\u00f3 expuestos a los sistemas Windows.<\/p>\n<p>El hallazgo tambi\u00e9n demuestra la importancia de las t\u00e9cnicas de <em>patch diffing<\/em> y an\u00e1lisis de causa ra\u00edz. ESET utiliz\u00f3 Diaphora para comparar las versiones binarias y localizar exactamente las funciones modificadas, lo que permiti\u00f3 no solo reproducir el crash sino tambi\u00e9n comprender por qu\u00e9 ocurr\u00eda y qu\u00e9 condiciones eran necesarias. Este nivel de detalle es esencial para que los equipos de seguridad puedan evaluar correctamente el riesgo y priorizar la aplicaci\u00f3n de parches.<\/p>\n<p>Finalmente, el caso de CVE\u20112025\u201150165 refuerza la necesidad de que los desarrolladores de aplicaciones que utilizan WIC consideren qu\u00e9 operaciones realizan sobre im\u00e1genes de alta profundidad de bits. Aunque Windows ya ha corregido el fallo a partir de la versi\u00f3n 10.0.26100.4946, cualquier aplicaci\u00f3n que implemente su propio manejo de JPG de 12 o 16 bits deber\u00eda verificar que los punteros a funci\u00f3n est\u00e9n inicializados antes de usarlos, o bien limitarse a trabajar exclusivamente con el est\u00e1ndar de 8 bits.<\/p>\n<p>En retrospectiva, la vulnerabilidad CVE\u20112025\u201150165 es un recordatorio de que incluso un formato tan maduro y estudiado como JPG puede albergar fallos cr\u00edticos en los rincones menos transitados de su implementaci\u00f3n. La combinaci\u00f3n de una biblioteca desactualizada, punteros no inicializados y un camino de c\u00f3digo poco com\u00fan cre\u00f3 una ventana de riesgo real, aunque de explotaci\u00f3n dif\u00edcil. Los usuarios de Windows que ya han instalado las actualizaciones de seguridad de noviembre de 2025 est\u00e1n protegidos. Para el resto, la simple acci\u00f3n de abrir una imagen JPG no deber\u00eda desencadenar el fallo, pero cualquier escenario que implique guardar o generar miniaturas de im\u00e1genes de alta precisi\u00f3n sigue siendo un vector potencial hasta que se aplique el parche.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En noviembre de 2025, una vulnerabilidad clasificada como cr\u00edtica por Microsoft y documentada inicialmente por Zscaler ThreatLabz sacudi\u00f3 la confianza en uno de los formatos de imagen m\u00e1s ubicuos de la web: el JPG. La CVE\u20112025\u201150165, alojada en la biblioteca WindowsCodecs.dll, promet\u00eda la capacidad de ejecutar c\u00f3digo remoto con solo abrir un archivo JPG especialmente [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":68368,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/pub-4d4fc17555de4152be07eaf2a416a31e.r2.dev\/es\/ocie_1789132389408.jpg","fifu_image_alt":"CVE-2025-50165 permite ejecutar c\u00f3digo remoto al abrir un archivo JPG","footnotes":""},"categories":[5],"tags":[],"class_list":["post-68082","post","type-post","status-publish","format-standard","has-post-thumbnail","category-tecnologia"],"fifu_image_url":"https:\/\/pub-4d4fc17555de4152be07eaf2a416a31e.r2.dev\/es\/ocie_1789132389408.jpg","fifu_image_alt":"CVE-2025-50165 permite ejecutar c\u00f3digo remoto al abrir un archivo JPG","_links":{"self":[{"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/posts\/68082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/comments?post=68082"}],"version-history":[{"count":2,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/posts\/68082\/revisions"}],"predecessor-version":[{"id":68084,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/posts\/68082\/revisions\/68084"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/media\/68368"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/media?parent=68082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/categories?post=68082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/es\/wp-json\/wp\/v2\/tags?post=68082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}