<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Privesc on seraldinho.pages.dev</title><link>https://seraldinho.pages.dev/tags/privesc/</link><description>Recent content in Privesc on seraldinho.pages.dev</description><generator>Hugo -- gohugo.io</generator><language>es</language><managingEditor>nseral@proton.me (Nicolás Seral)</managingEditor><webMaster>nseral@proton.me (Nicolás Seral)</webMaster><copyright>© 2026 Nicolás Seral</copyright><atom:link href="https://seraldinho.pages.dev/tags/privesc/index.xml" rel="self" type="application/rss+xml"/><item><title>Python Cache Poisoning</title><link>https://seraldinho.pages.dev/notas/tecnicas/python-cache-poisoning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/python-cache-poisoning/</guid><description>&lt;p&gt;El &lt;strong&gt;python cache poisoning&lt;/strong&gt; es una vulnerabilidad (o técnica, según se mire) que permite escalar privilegios aprovechando la confianza de Python en archivos bytecode (&lt;code&gt;.pyc&lt;/code&gt;) precompilados de scripts que ejecuta (normalmente con privilegios elevados).&lt;/p&gt;
&lt;p&gt;Cuando Python ejecuta un script o importa una librería, hace lo siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si &lt;strong&gt;no existe&lt;/strong&gt; una versión precompilada, compila el código fuente a bytecode, que normalmente se almacena en &lt;code&gt;__pycache__/NOMBRELIB.cpython-VERSION.pyc&lt;/code&gt; o (menos común) bajo un prefijo &lt;code&gt;PYTHONPYCACHEPREFIX&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si &lt;strong&gt;existe&lt;/strong&gt; una versión precompilada, comprueba la cabecera (Magic Number que depende de la versión de Python, flags, metadatos como &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt; o &lt;code&gt;hash&lt;/code&gt;), y, si al compararla con el &lt;code&gt;.py&lt;/code&gt; original está bien, la ejecuta confiando en el &lt;code&gt;.pyc&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="danger"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"&gt;
&lt;path fill="currentColor" d="M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-2.8-5.6-5.6-11.2-9.8-16.8l-50.6 58.8s-81.4-103.6-87.1-110.6C133.1 243.8 112 273.2 112 306.8C112 375.4 162.6 416 225.7 416z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Nota: Escalada de privilegios
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;&lt;em&gt;Si un proceso con más privilegios ejecuta un .py o importa un módulo cuyo .pyc ha sido manipulado por un usuario menos privilegiado (y pasa la comprobación de cabecera), el payload corre con esos privilegios elevados.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Python Library Hijacking</title><link>https://seraldinho.pages.dev/notas/tecnicas/python-library-hijacking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/python-library-hijacking/</guid><description>&lt;p&gt;El Python Library Hijacking es una técnica de escalada de privilegios que consiste en aprovechar la forma en la que Python busca las librerías para cargar código malicioso en lugar de las librerías originales.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Funcionamiento
 &lt;div id="funcionamiento" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#funcionamiento" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Python busca módulos en un órden específico definido por &lt;code&gt;sys.path&lt;/code&gt;, que puede verse de la siguiente manera:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ python3 -c &lt;span style="color:#e6db74"&gt;&amp;#39;import sys; print(sys.path)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python312.zip&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python3.12&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python3.12/lib-dynload&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/local/lib/python3.12/dist-packages&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python3/dist-packages&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Normalmente, el orden es el siguiente:&lt;/p&gt;</description></item></channel></rss>