<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[• El Otro Blog •]]></title><description><![CDATA[Código y Cafeína ]]></description><link>https://blog.melizeche.com/</link><image><url>https://blog.melizeche.com/favicon.png</url><title>• El Otro Blog •</title><link>https://blog.melizeche.com/</link></image><generator>Ghost 5.104</generator><lastBuildDate>Fri, 06 Mar 2026 05:22:37 GMT</lastBuildDate><atom:link href="https://blog.melizeche.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Mi experiencia contribuyendo a authentik: un año construyendo identidad open source]]></title><description><![CDATA[Siempre soñé con que me pagaran por escribir open source. En enero de 2025, eso se hizo realidad. Esto es lo que aprendí en un año contribuyendo a authentik.]]></description><link>https://blog.melizeche.com/mi-experiencia-contribuyendo-a-authentik-un-ano-construyendo-identidad-open-source/</link><guid isPermaLink="false">698778bdeeebe6a90bf1d46c</guid><category><![CDATA[authentik]]></category><category><![CDATA[open source]]></category><category><![CDATA[IdP]]></category><category><![CDATA[keycloak]]></category><category><![CDATA[SAML]]></category><category><![CDATA[OAuth2]]></category><category><![CDATA[Passkey]]></category><category><![CDATA[defcon]]></category><category><![CDATA[djangocon]]></category><category><![CDATA[documentation]]></category><category><![CDATA[personal]]></category><category><![CDATA[security]]></category><category><![CDATA[career]]></category><category><![CDATA[python]]></category><category><![CDATA[django]]></category><category><![CDATA[WebAuthn]]></category><category><![CDATA[OIDC]]></category><category><![CDATA[identity]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Fri, 27 Feb 2026 10:34:07 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2026/02/Gemini_Generated_Image_ttody7ttody7ttod-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.melizeche.com/content/images/2026/02/Gemini_Generated_Image_ttody7ttody7ttod-1.png" alt="Mi experiencia contribuyendo a authentik: un a&#xF1;o construyendo identidad open source"><p>Siempre so&#xF1;&#xE9; con que me pagaran por escribir y mantener open source. En enero de 2025, eso se hizo realidad cuando me un&#xED; al equipo de&#xA0;<a href="https://goauthentik.io/?ref=blog.melizeche.com"><strong>authentik</strong></a>, un Identity Provider open source moderno que soporta <strong>SAML, OAuth2/OIDC, LDAP, RADIUS </strong>y m&#xE1;s. En este tiempo aport&#xE9; nuevas funcionalidades, mejoras de UX, correcci&#xF3;n de bugs, documentaci&#xF3;n y mantenimiento de dependencias.</p><p>authentik une varias de mis pasiones: el open source, la seguridad y la experiencia de usuario. Mi experiencia con IdPs era bastante limitada, m&#xE1;s bien por un background en consultor&#xED;a de seguridad y pentesting. De protocolos hab&#xED;a implementado OAuth2 en un par de proyectos, incluyendo una integraci&#xF3;n de autenticaci&#xF3;n OAuth2.0 entre un sistema legacy y BigCommerce en Snap Kitchen, pero trabajar en el n&#xFA;cleo de un Identity Provider era territorio nuevo. Y result&#xF3; ser exactamente donde quer&#xED;a estar :)</p><h2 id="el-mejor-proceso-de-hiring-que-viv%C3%AD">El mejor proceso de hiring que viv&#xED;</h2><p>Antes de hablar de c&#xF3;digo, quiero hablar del proceso de contrataci&#xF3;n, porque dice mucho sobre la cultura del equipo. Fue el mejor que viv&#xED; en mi carrera: Complet&#xE9; un Google form, una entrevista con el CEO (<em>Fletcher Heisler</em>), otra con el CTO (<em>Jens Langhammer</em>), y listo, me propusieron un contrato de 4 semanas de prueba para ver c&#xF3;mo trabaj&#xE1;bamos juntos. Mi CV, mi GitHub y las entrevistas demostraban que la experiencia estaba. Nada de pruebas de LeetCode que no tienen nada que ver con el trabajo real.</p><p>Mi tarea de prueba fue un feature request que la comunidad ven&#xED;a pidiendo desde 2022.</p><h2 id="email-otp-mi-primer-desaf%C3%ADo-y-prueba-de-fuego">Email OTP: mi primer desaf&#xED;o y prueba de fuego</h2><p>El&#xA0;<a href="https://github.com/goauthentik/authentik/pull/12630?ref=blog.melizeche.com">Email Authenticator Stage</a>, un sistema completo de autenticaci&#xF3;n multifactor por correo electr&#xF3;nico, fue mi tarea de ingreso. El issue llevaba abierto desde 2022 y era una funcionalidad muy solicitada: no todos los usuarios tienen acceso a apps de TOTP o a llaves de seguridad, y el email es una alternativa accesible que muchas organizaciones necesitan.</p><p>El desarrollo incluy&#xF3; el stage completo (una app de Django), la integraci&#xF3;n con el flow engine de authentik, la UI en Lit.js, la documentaci&#xF3;n y los tests. Fueron varias semanas desde el primer commit hasta tenerlo estable&#xA0;<a href="https://github.com/goauthentik/authentik/pull/12630?ref=blog.melizeche.com">(+3,286 -18)</a>. Pero el desaf&#xED;o mayor fue entender todo el sistema y c&#xF3;mo cada parte se conecta con otra, por suerte tuve much&#xED;simo feedback y ayuda de parte del equipo.</p><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2026/02/image-2.png" class="kg-image" alt="Mi experiencia contribuyendo a authentik: un a&#xF1;o construyendo identidad open source" loading="lazy" width="1696" height="432" srcset="https://blog.melizeche.com/content/images/size/w600/2026/02/image-2.png 600w, https://blog.melizeche.com/content/images/size/w1000/2026/02/image-2.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2026/02/image-2.png 1600w, https://blog.melizeche.com/content/images/2026/02/image-2.png 1696w" sizes="(min-width: 720px) 720px"></figure><p>Y como no pod&#xED;a ser de otra manera, pagando derecho de piso, romp&#xED; el env&#xED;o de mails desde authentik &#x1F926;&#x1F3FB;&#x200D;&#x2642;&#xFE0F;. Hab&#xED;a un&#xA0;<a href="https://github.com/goauthentik/authentik/issues/13649?ref=blog.melizeche.com">bug de serializaci&#xF3;n en el email stage</a>&#xA0;que no suced&#xED;a en dev, solo en entornos de producci&#xF3;n cuando la tarea se serializaba para enviar al worker, pero sacamos un&#xA0;<a href="https://github.com/goauthentik/authentik/pull/13256?ref=blog.melizeche.com">patch</a>&#xA0;bastante r&#xE1;pido y la crisis fue resuelta.</p><p>A ra&#xED;z de esto me convert&#xED; no oficialmente en el &quot;email guy&quot; y tuve que resolver varios bugs relacionados con el env&#xED;o de correos. El m&#xE1;s divertido fue otro&#xA0;<a href="https://github.com/goauthentik/authentik/issues/13649?ref=blog.melizeche.com#issuecomment-2762749062">bug de serializaci&#xF3;n en el email stage</a>&#xA0;que me tom&#xF3; varias iteraciones: el problema aparec&#xED;a cuando el nombre del remitente conten&#xED;a caracteres en cir&#xED;lico, un caso edge sutil que romp&#xED;a la serializaci&#xF3;n de formas inesperadas.</p><h1 id="algunos-features-que-implement%C3%A9">Algunos features que implement&#xE9;</h1><h2 id="password-uniqueness-policy-seguridad-enterprise">Password Uniqueness Policy: seguridad enterprise</h2><p><a href="https://github.com/goauthentik/authentik/pull/13453?ref=blog.melizeche.com">Implement&#xE9;</a>&#xA0;una pol&#xED;tica de&#xA0;<em>unicidad</em>&#xA0;de contrase&#xF1;as (enterprise), que permite a los administradores configurar que los usuarios no puedan reutilizar contrase&#xF1;as anteriores. Es una funcionalidad est&#xE1;ndar en entornos corporativos donde las pol&#xED;ticas de compliance exigen la rotaci&#xF3;n de contrase&#xF1;as sin repetici&#xF3;n.</p><p>La cantidad de contrase&#xF1;as anteriores contra las que se compara es configurable. Los hashes de contrase&#xF1;as anteriores se almacenan de forma segura en la base de datos de authentik y la pol&#xED;tica se integra directamente en el flujo de cambio de contrase&#xF1;a, de forma transparente para el usuario.</p><h2 id="oauth2oidc-back-channel-logout-probablemente-el-feature-m%C3%A1s-complejo">OAuth2/OIDC Back-Channel Logout: probablemente el feature m&#xE1;s complejo</h2><p>Este fue probablemente el feature m&#xE1;s&#xA0;<a href="https://github.com/goauthentik/authentik/pull/15401?ref=blog.melizeche.com">complicado en el que trabaj&#xE9;</a>, y con mucho impacto. authentik ya contaba con uno de los mejores soportes OAuth2/OIDC del mercado, pero faltaba el back-channel logout, una&#xA0;<a href="https://openid.net/specs/openid-connect-backchannel-1_0.html?ref=blog.melizeche.com">especificaci&#xF3;n</a>&#xA0;bastante nueva que permite que cuando un usuario cierra sesi&#xF3;n, se notifique autom&#xE1;ticamente a todas las aplicaciones conectadas para que invaliden sus sesiones. Un cierre de sesi&#xF3;n verdaderamente global.</p><p>Lo que hizo este desarrollo especialmente desafiante fue lo nuevo del est&#xE1;ndar: la gran mayor&#xED;a de los IdPs no lo soportaban al momento de la implementaci&#xF3;n, incluidos big players como Okta. Esto tambi&#xE9;n signific&#xF3; que probarlo con aplicaciones reales fue dif&#xED;cil, porque pocas lo soportan del lado del Service Provider. Lo probamos con Matrix Synapse y con Keycloak (que tambi&#xE9;n es un excelente IdP open source), entre otros.</p><p>Escribimos&#xA0;<a href="https://goauthentik.io/blog/2025-10-21-authentik-now-supports-single-logout/?ref=blog.melizeche.com">un post</a>&#xA0;con los detalles de la implementaci&#xF3;n.</p><h2 id="passkey-autofill-cuando-ux-y-seguridad-se-encuentran">Passkey Autofill: cuando UX y seguridad se encuentran</h2><p>Entre las cosas que m&#xE1;s me gustaron de trabajar en authentik fue poder implementar features que mejoran la experiencia de usuario sin sacrificar seguridad. El&#xA0;<a href="https://github.com/goauthentik/authentik/pull/18377?ref=blog.melizeche.com">Passkey Autofill</a>&#xA0;es un ejemplo perfecto de esto. Implement&#xE9; el soporte para WebAuthn Conditional UI, m&#xE1;s conocido como passkey autofill. Esto permite que en el stage de identificaci&#xF3;n el navegador sugiera autom&#xE1;ticamente las passkeys disponibles, similar a como el autocompletado sugiere contrase&#xF1;as guardadas, pero para passkeys.</p><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2026/02/passkey.gif" class="kg-image" alt="Mi experiencia contribuyendo a authentik: un a&#xF1;o construyendo identidad open source" loading="lazy" width="741" height="573" srcset="https://blog.melizeche.com/content/images/size/w600/2026/02/passkey.gif 600w, https://blog.melizeche.com/content/images/2026/02/passkey.gif 741w" sizes="(min-width: 720px) 720px"></figure><p>Lo uso en mi d&#xED;a a d&#xED;a en mi propia instancia de authentik y creo que es uno de esos features donde UX y seguridad hacen que la vida del usuario sea m&#xE1;s f&#xE1;cil&#xA0;<em>y</em>&#xA0;m&#xE1;s segura al mismo tiempo. El login passwordless con passkey autofill es extremadamente conveniente.</p><p>Un aprendizaje interesante de este feature fue el problema de&#xA0;<em>descubrimiento</em>. WebAuthn es el nombre t&#xE9;cnicamente correcto del est&#xE1;ndar, pero la mayor&#xED;a de los usuarios no sabe qu&#xE9; es. Lo que s&#xED; conocen son &quot;passkeys&quot;, &quot;security keys&quot;, &quot;Yubikeys&quot; o &quot;FIDO2&quot;. Es un problema real de la industria: la cantidad de t&#xE9;rminos y acr&#xF3;nimos hace que los usuarios no encuentren lo que buscan. Trabaj&#xE9; bastante en la documentaci&#xF3;n y en lo que se podr&#xED;a considerar SEO para asegurar que los usuarios pudieran encontrar estas funcionalidades con los t&#xE9;rminos que realmente usan.</p><h2 id="m%C3%A1s-all%C3%A1-del-c%C3%B3digo-documentaci%C3%B3n-ux-y-algunos-detalles-que-importan">M&#xE1;s all&#xE1; del c&#xF3;digo: documentaci&#xF3;n, UX y algunos detalles que importan</h2><p>No todo el trabajo que importa aparece en las release notes. Dediqu&#xE9; bastante tiempo a mejoras peque&#xF1;as que surgieron de ver c&#xF3;mo los usuarios realmente usaban el producto: b&#xFA;squeda case-insensitive porque la gente no siempre recuerda c&#xF3;mo escribi&#xF3; algo, links a la documentaci&#xF3;n en contexto porque nadie deber&#xED;a tener que buscar en Google desde adentro de la UI, mensajes de error m&#xE1;s claros que gu&#xED;en al usuario. El caso del passkey autofill me lo ense&#xF1;&#xF3; claramente: el feature estaba, pero si el usuario no lo encuentra porque lo llama &quot;passkey&quot; y vos lo llam&#xE1;s &quot;WebAuthn&quot;, es casi como si no existiera.</p><p>Tambi&#xE9;n estoy orgulloso de las contribuciones a la documentaci&#xF3;n, porque sin buenos docs los usuarios no pueden usar las funcionalidades. Un feature de seguridad que nadie usa por ser complicado o por no tener documentaci&#xF3;n, simplemente no sirve. En Authentik aprend&#xED; much&#xED;simo sobre c&#xF3;mo escribir documentaci&#xF3;n t&#xE9;cnica, gracias a la calidad de la documentaci&#xF3;n del proyecto y al equipo (&#xA1;gracias, Tana!).</p><h2 id="la-parte-invisible-mantenimiento-y-estabilidad">La parte invisible: mantenimiento y estabilidad</h2><p>Una parte importante del trabajo fue el mantenimiento de dependencias: m&#xE1;s de 330 actualizaciones de paquetes Python durante el a&#xF1;o (dependabot no funcionaba muy bien al principio con uv como package manager). Tambi&#xE9;n trabaj&#xE9; en varios upgrades de Django (5.0 -&gt; 5.1 -&gt; 5.2) que necesitaron mucho trabajo, inclusive forkear algunas dependencias para poder avanzar.</p><p>Tambi&#xE9;n fui release manager de las versiones 2025.4 y 2025.12, pero esto merece un post aparte.</p><h2 id="el-proceso-rigor-transparencia-y-colaboraci%C3%B3n">El proceso: rigor, transparencia y colaboraci&#xF3;n</h2><p>El proceso de code review en authentik es riguroso y colaborativo. Casi todo sucede en GitHub, por practicidad y por transparencia hacia la comunidad, aunque a veces necesitamos llamadas 1:1, pair programming o discusiones con todo el equipo.</p><p>La seguridad es innegociable, al igual que las buenas pr&#xE1;cticas. Varios pull requests toman semanas de review riguroso pero amigable. Tuve PRs rechazados, algunos fueron prototipos (un PR es la mejor forma de vender una idea al equipo) y otros chocaron con problemas que ocurrieron en el pasado con approaches similares. No conocer el &quot;lore&quot; de authentik fue un desaf&#xED;o al principio, pero eso es parte del aprendizaje.</p><p>Al ser un proyecto open source, cualquiera puede aportar en los PRs. Suelo pedirles colaboraci&#xF3;n a los usuarios afectados para probar los parches, ya sea en los issues de GitHub o en el Discord de la comunidad. Varios de mis compa&#xF1;eros actuales fueron contratados de la comunidad porque conoc&#xED;an el producto y lo usaban diariamente en sus homelabs o en sus trabajos.</p><h2 id="el-equipo-y-la-experiencia-m%C3%A1s-all%C3%A1-del-c%C3%B3digo">El equipo y la experiencia m&#xE1;s all&#xE1; del c&#xF3;digo</h2><p>No puedo hablar de mi experiencia en authentik sin hablar del equipo. Son personas extremadamente talentosas t&#xE9;cnicamente y con una calidez humana real, una combinaci&#xF3;n que no siempre se da en la industria. Sentir que uno puede seguir aprendiendo todos los d&#xED;as no tiene precio.</p><p>En 2025 tuve la oportunidad de representar a authentik como sponsor en DEFCON y DjangoCon, atendiendo el stand junto a varios compa&#xF1;eros. En la DjangoCon adem&#xE1;s di una&#xA0;<a href="https://youtu.be/5fonCHDtvPg?si=AjoOOK-mF0ueyxKw&amp;t=1415&amp;ref=blog.melizeche.com">lightning talk sobre back-channel logout</a>, presentando en vivo el feature en el que hab&#xED;a trabajado. Estar del otro lado, explic&#xE1;ndoles a otros desarrolladores por qu&#xE9; esto importa y viendo sus reacciones, fue una experiencia muy distinta a escribir el c&#xF3;digo.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/5fonCHDtvPg?start=1415&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="DjangoCon US 2025 - Lightning Talks (Wednesday) with Andrew Mshar"></iframe></figure><p>El momento m&#xE1;s especial fue el company retreat en Francia, donde nos encontramos presencialmente por primera vez. Cada uno de un lugar distinto del mundo, y hasta ese momento toda nuestra colaboraci&#xF3;n hab&#xED;a sido remota. Ponerle cara y personalidad a las personas con las que ven&#xED;s trabajando d&#xED;a a d&#xED;a cambia la din&#xE1;mica por completo.</p><h2 id="lo-que-aprend%C3%AD">Lo que aprend&#xED;</h2><p>Contribuir a authentik me dio la oportunidad de trabajar en un stack completo y diverso: Python con Django en el backend, TypeScript con Lit.js en el frontend y Go en los outposts. Aprend&#xED; mucho sobre protocolos de identidad (OAuth2, SAML, WebAuthn), sobre c&#xF3;mo dise&#xF1;ar sistemas de autenticaci&#xF3;n flexibles a trav&#xE9;s del flow engine, y sobre algo que no es tan t&#xE9;cnico pero igual de importante: pensar a futuro. Una soluci&#xF3;n tiene que ser buena en el tiempo y no solo para resolver el problema actual. Nada de quick patches.</p><p>El trabajo en open source te obliga a pensar en la documentaci&#xF3;n, en los edge cases, en la retrocompatibilidad y en que tu c&#xF3;digo va a ser le&#xED;do y usado por personas que no conoc&#xE9;s. Eso, yo creo que te hace un mejor desarrollador.</p><h2 id="%C2%BFy-ahora">&#xBF;Y ahora?</h2><figure class="kg-card kg-image-card kg-card-hascaption"><a href="https://bsidessf2026.sched.com/event/2E1hG/building-an-open-source-security-project-with-1m+-installations-nulb?ref=blog.melizeche.com"><img src="https://blog.melizeche.com/content/images/2026/02/image.png" class="kg-image" alt="Mi experiencia contribuyendo a authentik: un a&#xF1;o construyendo identidad open source" loading="lazy" width="1964" height="1228" srcset="https://blog.melizeche.com/content/images/size/w600/2026/02/image.png 600w, https://blog.melizeche.com/content/images/size/w1000/2026/02/image.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2026/02/image.png 1600w, https://blog.melizeche.com/content/images/2026/02/image.png 1964w" sizes="(min-width: 720px) 720px"></a><figcaption><a href="https://bsidessf2026.sched.com/event/2E1hG/building-an-open-source-security-project-with-1m+-installations-nulb?iframe=yes&amp;w=100%25&amp;sidebar=yes&amp;bg=no&amp;ref=blog.melizeche.com"><span style="white-space: pre-wrap;">https://bsidessf2026.sched.com/event/2E1hG/building-an-open-source-security-project-with-1m+-installations-nulb</span></a></figcaption></figure><p>Lo que s&#xED;, a corto plazo, gracias a authentik, voy a dar una charla con Fletcher, mi jefe, en San Francisco, California, en la conferencia de seguridad BSidesSF. Est&#xE1; de m&#xE1;s decir que estoy muy emocionado por eso.</p><p>Si bien es imposible saber todo lo que depara el futuro, todos los indicios son bastante positivos. Sobre todo, el sentirse realizado con el trabajo que uno hace es extremadamente satisfactorio. S&#xE9; que estoy exactamente donde quiero estar :)</p><h2 id="%C2%BFquer%C3%A9s-contribuir">&#xBF;Quer&#xE9;s contribuir?</h2><p>Si est&#xE1;s pensando en contribuir a authentik, mi consejo es simple: us&#xE1; el producto. Aprend&#xE9; c&#xF3;mo funciona, identific&#xE1; qu&#xE9; se podr&#xED;a mejorar para tu caso de uso. Los mejores contribuidores y varios de mis compa&#xF1;eros empezaron exactamente as&#xED;.</p><p>Pod&#xE9;s encontrar el proyecto en&#xA0;<a href="https://github.com/goauthentik/authentik?ref=blog.melizeche.com">GitHub</a>, unirte al&#xA0;<a href="https://goauthentik.io/discord?ref=blog.melizeche.com">Discord de la comunidad</a> y empezar a explorar los issues abiertos. Y si la identidad, la seguridad y el open source son tu combinaci&#xF3;n ideal, como lo son para m&#xED;, quiz&#xE1;s este sea tu pr&#xF3;ximo proyecto.</p><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #F0F0F0; display: none;">
            
            <div class="kg-signup-card-content">
                
                <div class="kg-signup-card-text ">
                    <h2 class="kg-signup-card-heading" style="color: #000000;"><span style="white-space: pre-wrap;">&#xBF;Quer&#xE9;s m&#xE1;s contenido como este? Suscribite sin costo a &#x2022; El Otro Blog &#x2022;</span></h2>
                    <p class="kg-signup-card-subheading" style="color: #000000;"><span style="white-space: pre-wrap;">C&#xF3;digo y Cafe&#xED;na</span></p>
                    
        <form class="kg-signup-card-form" data-members-form="signup">
            
            <div class="kg-signup-card-fields">
                <input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
                <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
                    <span class="kg-signup-card-button-default">Subscribe</span>
                    <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
        <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
                <circle cx="4" cy="12" r="3"/>
                <circle cx="12" cy="12" r="3"/>
                <circle cx="20" cy="12" r="3"/>
            </g>
            <style data-cap="butt">
                .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
                .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
                .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
                .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
                .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
                @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
            </style>
        </g>
    </svg></span>
                </button>
            </div>
            <div class="kg-signup-card-success" style="color: #000000;">
                Email sent! Check your inbox to complete your signup.
            </div>
            <div class="kg-signup-card-error" style="color: #000000;" data-members-error></div>
        </form>
        
                    <p class="kg-signup-card-disclaimer" style="color: #000000;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
                </div>
            </div>
        </div>]]></content:encoded></item><item><title><![CDATA[Análisis de la Encuesta de Desarrolladores de Paraguay 2024]]></title><description><![CDATA[Un análisis visual de salarios y modalidades de trabajo en el ecosistema tech paraguayo]]></description><link>https://blog.melizeche.com/analisis-de-la-encuesta-de-desarrolladores-de-paraguay-2024/</link><guid isPermaLink="false">6944e1a8eeebe6a90bf1d3a0</guid><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Fri, 19 Dec 2025 06:23:41 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2025/12/Gemini_Generated_Image_9abbyv9abbyv9abb.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.melizeche.com/content/images/2025/12/Gemini_Generated_Image_9abbyv9abbyv9abb.png" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024"><p>&#xBF;Cu&#xE1;nto gana realmente un dev en Paraguay? Es la pregunta del mill&#xF3;n (o de los 14 millones de guaran&#xED;es, seg&#xFA;n estos datos). Hasta ahora, la respuesta depend&#xED;a de an&#xE9;cdotas, rumores de pasillo y alg&#xFA;n que otro post en LinkedIn.</p><p>El difunto blog&#xA0;<a href="https://proyectosbeta.net/?ref=blog.melizeche.com">ProyectosBeta</a>&#xA0;se propuso cambiar eso con la&#xA0;<strong>Encuesta de Desarrolladores de Paraguay 2024</strong>. En abril, casi 400 devs respondieron preguntas sobre sus salarios, c&#xF3;mo trabajan, qu&#xE9; tecnolog&#xED;as usan, y hasta qu&#xE9; lenguajes odian. Los datos&#xA0;<a href="https://github.com/proyectosbeta/Encuestas-Developers-Paraguay?ref=blog.melizeche.com">est&#xE1;n</a>, as&#xED; que me puse a analizarlos.</p><p>Spoiler: si trabaj&#xE1;s remoto para el exterior, probablemente est&#xE9;s ganando el triple que tu colega que va a la oficina todos los d&#xED;as. Pero hay m&#xE1;s matices que eso, y algunos resultados sorprenden.</p><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #F0F0F0; display: none;">
            
            <div class="kg-signup-card-content">
                
                <div class="kg-signup-card-text ">
                    <h2 class="kg-signup-card-heading" style="color: #000000;"><span style="white-space: pre-wrap;">Suscribite sin costo a &#x2022; El Otro Blog &#x2022;</span></h2>
                    <p class="kg-signup-card-subheading" style="color: #000000;"><span style="white-space: pre-wrap;">C&#xF3;digo y Cafe&#xED;na</span></p>
                    
        <form class="kg-signup-card-form" data-members-form="signup">
            
            <div class="kg-signup-card-fields">
                <input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
                <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
                    <span class="kg-signup-card-button-default">Subscribe</span>
                    <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
        <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
                <circle cx="4" cy="12" r="3"/>
                <circle cx="12" cy="12" r="3"/>
                <circle cx="20" cy="12" r="3"/>
            </g>
            <style data-cap="butt">
                .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
                .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
                .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
                .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
                .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
                @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
            </style>
        </g>
    </svg></span>
                </button>
            </div>
            <div class="kg-signup-card-success" style="color: #000000;">
                Email sent! Check your inbox to complete your signup.
            </div>
            <div class="kg-signup-card-error" style="color: #000000;" data-members-error></div>
        </form>
        
                    <p class="kg-signup-card-disclaimer" style="color: #000000;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
                </div>
            </div>
        </div><hr><p></p><h2 id="hallazgos-principales">Hallazgos Principales</h2>
<!--kg-card-begin: html-->
<table data-line="14" class="code-line" dir="auto" style="border-collapse: collapse; margin-bottom: 0.7em; position: relative; color: rgb(204, 204, 204); font-family: -apple-system, &quot;system-ui&quot;, &quot;Segoe WPC&quot;, &quot;Segoe UI&quot;, system-ui, Ubuntu, &quot;Droid Sans&quot;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead data-line="14" class="code-line" dir="auto" style="position: relative;"><tr data-line="14" class="code-line" dir="auto" style="position: relative;"><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">M&#xE9;trica</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Valor</th></tr></thead><tbody data-line="16" class="code-line" dir="auto" style="position: relative;"><tr data-line="16" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">Total de respuestas</td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">394</td></tr><tr data-line="17" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">Salario promedio</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">14.2M Gs.</td></tr><tr data-line="18" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">Salario mediano</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">10.5M Gs.</td></tr><tr data-line="19" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">Modalidad m&#xE1;s com&#xFA;n</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">Remoto (38.6%)</td></tr></tbody></table>
<!--kg-card-end: html-->
<p>El dato que m&#xE1;s salta: trabajar para el exterior paga&#xA0;<strong>3 veces m&#xE1;s</strong>&#xA0;que hacerlo para una empresa local. No es novedad para nadie en el rubro, pero ahora hay n&#xFA;meros que lo respaldan.</p><p>Ojo, todo esto es con los datos de la encuesta, el an&#xE1;lisis tiene limitaciones que al final del post se explican.</p><hr><h2 id="gr%C3%A1fico-1-distribuci%C3%B3n-de-salarios-mensuales">Gr&#xE1;fico 1: Distribuci&#xF3;n de Salarios Mensuales</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico1_distribucion_salarios.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="2000" height="1009" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico1_distribucion_salarios.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico1_distribucion_salarios.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico1_distribucion_salarios.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico1_distribucion_salarios.png 2076w" sizes="(min-width: 720px) 720px"></figure><p>Cantidad de desarrolladores en cada rango salarial, ordenado de menor a mayor.</p><h3 id="observaciones">Observaciones</h3><ul><li>El rango m&#xE1;s frecuente es&#xA0;<strong>7-9M Gs.</strong>&#xA0;seguido de&#xA0;<strong>5-7M Gs.</strong></li><li>Existe una distribuci&#xF3;n bimodal: un grupo grande en rangos medios (5-12M) y otro grupo m&#xE1;s peque&#xF1;o en rangos altos (24M+)</li><li>Solo el&#xA0;<strong>~5%</strong>&#xA0;de los encuestados gana m&#xE1;s de 50M Gs. mensuales</li><li>El salario m&#xED;nimo (&#x2264;2.5M) representa menos del 3% de las respuestas</li></ul><p>El mercado tech paraguayo tiene una base salarial s&#xF3;lida comparada con otros sectores. Sin embargo, existe una brecha significativa entre los salarios locales y los que se obtienen trabajando para el exterior.</p><hr><h2 id="gr%C3%A1fico-2-modalidad-de-trabajo">Gr&#xE1;fico 2: Modalidad de Trabajo</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico2_modalidad_trabajo.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1336" height="1196" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico2_modalidad_trabajo.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico2_modalidad_trabajo.png 1000w, https://blog.melizeche.com/content/images/2025/12/grafico2_modalidad_trabajo.png 1336w" sizes="(min-width: 720px) 720px"></figure><p>El remoto gan&#xF3;. Casi el 40% trabaja desde casa (o desde donde quiera), y si sum&#xE1;s el h&#xED;brido, m&#xE1;s de la mitad no va a una oficina todos los d&#xED;as.</p><p>La pandemia aceler&#xF3; esto y tiene sentido: si pod&#xE9;s trabajar remoto, pod&#xE9;s acceder a empleadores del exterior. Y ya vimos lo que eso significa para el bolsillo.</p><hr><h2 id="gr%C3%A1fico-3-salario-por-modalidad-de-trabajo">Gr&#xE1;fico 3: Salario por Modalidad de Trabajo</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico3_salario_modalidad_trabajo.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1784" height="1047" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico3_salario_modalidad_trabajo.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico3_salario_modalidad_trabajo.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico3_salario_modalidad_trabajo.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico3_salario_modalidad_trabajo.png 1784w" sizes="(min-width: 720px) 720px"></figure><p>Ac&#xE1; est&#xE1; el gr&#xE1;fico que afecta si vas a la oficina todos los d&#xED;as:</p>
<!--kg-card-begin: html-->
<table data-line="59" class="code-line" dir="auto" style="border-collapse: collapse; margin-bottom: 0.7em; position: relative; color: rgb(204, 204, 204); font-family: -apple-system, &quot;system-ui&quot;, &quot;Segoe WPC&quot;, &quot;Segoe UI&quot;, system-ui, Ubuntu, &quot;Droid Sans&quot;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead data-line="59" class="code-line" dir="auto" style="position: relative;"><tr data-line="59" class="code-line" dir="auto" style="position: relative;"><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Modalidad</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Mediana</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Promedio</th></tr></thead><tbody data-line="61" class="code-line" dir="auto" style="position: relative;"><tr data-line="61" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);"><strong>Remoto</strong></td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">16.5M Gs.</td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">20.2M Gs.</td></tr><tr data-line="62" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>H&#xED;brido</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">10.5M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">12.7M Gs.</td></tr><tr data-line="63" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Presencial</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">8.0M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">8.9M Gs.</td></tr></tbody></table>
<!--kg-card-end: html-->
<p>El remoto paga&#xA0;<strong>el doble</strong>&#xA0;que el presencial. Ojo: esto no significa que trabajar desde casa m&#xE1;gicamente duplique tu sueldo. Lo que pasa es que el remoto te abre la puerta a empresas de afuera, y ah&#xED; est&#xE1; la diferencia real.</p><hr><h2 id="gr%C3%A1fico-4-salario-por-tipo-de-empleador">Gr&#xE1;fico 4: Salario por Tipo de Empleador</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico4_salario_tipo_empleador.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="2000" height="1005" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico4_salario_tipo_empleador.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico4_salario_tipo_empleador.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico4_salario_tipo_empleador.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico4_salario_tipo_empleador.png 2084w" sizes="(min-width: 720px) 720px"></figure><p>Este es el gr&#xE1;fico clave. Mir&#xE1; la diferencia:</p>
<!--kg-card-begin: html-->
<table data-line="75" class="code-line" dir="auto" style="border-collapse: collapse; margin-bottom: 0.7em; position: relative; color: rgb(204, 204, 204); font-family: -apple-system, &quot;system-ui&quot;, &quot;Segoe WPC&quot;, &quot;Segoe UI&quot;, system-ui, Ubuntu, &quot;Droid Sans&quot;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead data-line="75" class="code-line" dir="auto" style="position: relative;"><tr data-line="75" class="code-line" dir="auto" style="position: relative;"><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Tipo de Empleador</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Mediana</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Promedio</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">n</th></tr></thead><tbody data-line="77" class="code-line" dir="auto" style="position: relative;"><tr data-line="77" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);"><strong>Empleador del exterior</strong></td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">25.5M Gs.</td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">30.1M Gs.</td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">76</td></tr><tr data-line="78" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Local con clientes exterior</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">10.5M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">13.6M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">25</td></tr><tr data-line="79" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Empleador local (Paraguay)</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">8.0M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">10.1M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">262</td></tr><tr data-line="80" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Freelance</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">6.0M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">9.4M Gs.</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">31</td></tr></tbody></table>
<!--kg-card-end: html-->
<p>25 millones vs 8 millones de mediana. Tres veces m&#xE1;s. Ah&#xED; est&#xE1; el elefante en la habitaci&#xF3;n del mercado tech paraguayo.</p><h3 id="implicaciones">Implicaciones</h3><p>Existe una clara oportunidad de mejora salarial para quienes puedan acceder a empleadores del exterior. Las habilidades de ingl&#xE9;s y la capacidad de trabajar en zonas horarias diferentes son factores diferenciadores clave.</p><hr><h2 id="gr%C3%A1fico-5-salario-mediano-por-modalidad-%C3%97-empleador">Gr&#xE1;fico 5: Salario Mediano por Modalidad &#xD7; Empleador</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico5_salario_cruzado.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1658" height="1195" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico5_salario_cruzado.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico5_salario_cruzado.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico5_salario_cruzado.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico5_salario_cruzado.png 1658w" sizes="(min-width: 720px) 720px"></figure><p>Este heatmap cruza modalidad de trabajo con tipo de empleador. Cada celda muestra la mediana salarial y el n (cantidad de personas en esa combinaci&#xF3;n).</p><p>Lo que se ve claro:&#xA0;<strong>el empleador pesa m&#xE1;s que la modalidad</strong>. Mir&#xE1; la columna &quot;Exterior&quot; &#x2014; todos los valores son altos sin importar si es remoto, h&#xED;brido o presencial. En cambio, la columna &quot;Local (PY)&quot; tiene valores bajos en las tres modalidades.</p><p>Ojo con las celdas con n bajo (como presencial+exterior con n=1): no son representativas. Las combinaciones con m&#xE1;s datos son remoto+exterior (n=70) y presencial+local (n=128).</p><hr><h2 id="gr%C3%A1fico-6-heatmap-salario-vs-experiencia">Gr&#xE1;fico 6: Heatmap Salario vs Experiencia</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico6_heatmap_salario_experiencia.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1923" height="1196" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico6_heatmap_salario_experiencia.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico6_heatmap_salario_experiencia.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico6_heatmap_salario_experiencia.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico6_heatmap_salario_experiencia.png 1923w" sizes="(min-width: 720px) 720px"></figure><p>La diagonal que se forma confirma lo obvio: m&#xE1;s experiencia = m&#xE1;s plata. Los devs con 3-5 a&#xF1;os est&#xE1;n mayormente en el rango 5-12M, y los que superan los 27M casi todos tienen 10+ a&#xF1;os encima.</p><p>Pero hay puntos fuera de la diagonal. Juniors ganando como seniors. &#xBF;C&#xF3;mo? Ya sab&#xE9;s la respuesta: exterior.</p><hr><h2 id="gr%C3%A1fico-7-modalidad-de-trabajo-por-rango-salarial">Gr&#xE1;fico 7: Modalidad de Trabajo por Rango Salarial</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico7_modalidad_por_salario.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="2000" height="1146" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico7_modalidad_por_salario.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico7_modalidad_por_salario.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico7_modalidad_por_salario.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico7_modalidad_por_salario.png 2085w" sizes="(min-width: 720px) 720px"></figure><p>Otra forma de ver lo mismo: en los rangos bajos domina el presencial, en los altos domina el remoto. En el rango de m&#xE1;s de 50M, el remoto es m&#xE1;s del 80%.</p><p>El h&#xED;brido se mantiene parejo en todos los niveles, como un t&#xE9;rmino medio que no termina de definirse.</p><hr><h2 id="gr%C3%A1fico-8-dashboard-resumen">Gr&#xE1;fico 8: Dashboard Resumen</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico8_resumen.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="2000" height="1427" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico8_resumen.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico8_resumen.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico8_resumen.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico8_resumen.png 2093w" sizes="(min-width: 720px) 720px"></figure><p>Un resumen visual de todo. Lo que m&#xE1;s me llam&#xF3; la atenci&#xF3;n es la progresi&#xF3;n por nivel:</p><ul><li><strong>Trainee</strong>: ~4M Gs.</li><li><strong>Junior</strong>: ~6M Gs.</li><li><strong>Mid-senior</strong>: ~10M Gs.</li><li><strong>Senior</strong>: ~13M Gs.</li><li><strong>Staff/Principal</strong>: ~18-22M Gs.</li></ul><p>El salto de Mid a Senior es donde m&#xE1;s se nota la diferencia. Despu&#xE9;s de eso, la curva se aplana un poco.</p><hr><h2 id="gr%C3%A1fico-9-top-10-lenguajes-de-programaci%C3%B3n">Gr&#xE1;fico 9: Top 10 Lenguajes de Programaci&#xF3;n</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico9_top_lenguajes.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1782" height="1196" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico9_top_lenguajes.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico9_top_lenguajes.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico9_top_lenguajes.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico9_top_lenguajes.png 1782w" sizes="(min-width: 720px) 720px"></figure><p>SQL primero. Tiene sentido: casi todos tocamos bases de datos en alg&#xFA;n momento. Pero siendo puristas en cuanto a lenguajes de&#xA0;<strong>programaci&#xF3;n</strong>, el top 3 queda:</p><ol><li><strong>JavaScript</strong></li><li><strong>Java</strong></li><li><strong>Python</strong></li></ol><p>Java y PHP siguen teniendo presencia fuerte, especialmente en empresas locales con sistemas de hace a&#xF1;os. TypeScript ya super&#xF3; a PHP, si todav&#xED;a no lo aprendiste, quiz&#xE1;s sea momento.</p><hr><h2 id="gr%C3%A1fico-10-top-10-frameworks">Gr&#xE1;fico 10: Top 10 Frameworks</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico10_top_frameworks.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1777" height="1196" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico10_top_frameworks.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico10_top_frameworks.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico10_top_frameworks.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico10_top_frameworks.png 1777w" sizes="(min-width: 720px) 720px"></figure><p>React arrasa en frontend. Spring domina el backend Java, Django el de Python, Laravel el de PHP. JQuery sigue apareciendo, hay mucho c&#xF3;digo legacy(pero que funciona) dando vueltas.</p><p>Vue tiene su nicho pero no le hace sombra a React. Angular qued&#xF3; m&#xE1;s relegado de lo que esperaba.</p><hr><h2 id="gr%C3%A1fico-11-lenguaje-favorito-vs-m%C3%A1s-odiado">Gr&#xE1;fico 11: Lenguaje Favorito vs M&#xE1;s Odiado</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico11_lenguaje_favorito_vs_odiado.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="2000" height="1042" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico11_lenguaje_favorito_vs_odiado.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico11_lenguaje_favorito_vs_odiado.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico11_lenguaje_favorito_vs_odiado.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico11_lenguaje_favorito_vs_odiado.png 2385w" sizes="(min-width: 720px) 720px"></figure><p>Este es el gr&#xE1;fico m&#xE1;s divertido. Python gana como el m&#xE1;s querido, nadie se sorprende. Pero Java aparece segundo en favoritos Y primero en odiados. Es el lenguaje m&#xE1;s polarizante: o lo am&#xE1;s o lo odi&#xE1;s.</p><p>JavaScript tambi&#xE9;n divide aguas. PHP tiene sus haters de siempre. Y Genexus... bueno, si alguna vez tuviste que mantener un sistema legacy en Genexus, entend&#xE9;s por qu&#xE9; aparece ah&#xED;.</p><hr><h2 id="gr%C3%A1fico-12-stack-por-tipo-de-empleador">Gr&#xE1;fico 12: Stack por Tipo de Empleador</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico12_stack_por_empleador.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1941" height="1492" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico12_stack_por_empleador.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico12_stack_por_empleador.png 1000w, https://blog.melizeche.com/content/images/size/w1600/2025/12/grafico12_stack_por_empleador.png 1600w, https://blog.melizeche.com/content/images/2025/12/grafico12_stack_por_empleador.png 1941w" sizes="(min-width: 720px) 720px"></figure><p>Ac&#xE1; hay data &#xFA;til si est&#xE1;s pensando en qu&#xE9; aprender:</p>
<!--kg-card-begin: html-->
<table data-line="177" class="code-line" dir="auto" style="border-collapse: collapse; margin-bottom: 0.7em; position: relative; color: rgb(204, 204, 204); font-family: -apple-system, &quot;system-ui&quot;, &quot;Segoe WPC&quot;, &quot;Segoe UI&quot;, system-ui, Ubuntu, &quot;Droid Sans&quot;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead data-line="177" class="code-line" dir="auto" style="position: relative;"><tr data-line="177" class="code-line" dir="auto" style="position: relative;"><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Lenguaje</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Local (PY)</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Exterior</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Freelance</th></tr></thead><tbody data-line="179" class="code-line" dir="auto" style="position: relative;"><tr data-line="179" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);"><strong>SQL</strong></td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">~65%</td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">~55%</td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">~50%</td></tr><tr data-line="180" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>JavaScript</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~55%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~70%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~65%</td></tr><tr data-line="181" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>TypeScript</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~25%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~55%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~40%</td></tr><tr data-line="182" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Python</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~40%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~55%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~45%</td></tr><tr data-line="183" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Java</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~35%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~30%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~20%</td></tr><tr data-line="184" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>PHP</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~35%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~15%</td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">~40%</td></tr></tbody></table>
<!--kg-card-end: html-->
<ul><li><strong>TypeScript</strong>&#xA0;es mucho m&#xE1;s usado en empresas del exterior (55% vs 25% local)</li><li><strong>PHP</strong>&#xA0;es m&#xE1;s com&#xFA;n en empresas locales y freelance</li><li><strong>JavaScript</strong>&#xA0;domina en todos los segmentos pero m&#xE1;s en exterior</li><li><strong>Python</strong> es m&#xE1;s usado que Java, especialmente en el exterior</li><li><strong>Java</strong>&#xA0;tiene uso similar en local y exterior</li></ul><h3 id="implicaciones-1">Implicaciones</h3><p>Si quer&#xE9;s trabajar para el&#xA0;<strong>exterior</strong>, prioriz&#xE1;&#xA0;<strong>TypeScript</strong>&#xA0;sobre JavaScript puro. Las empresas locales a&#xFA;n usan mucho&#xA0;<strong>PHP</strong>&#xA0;y&#xA0;<strong>Java</strong>. Los freelancers tienen stacks m&#xE1;s variados.</p><hr><h2 id="gr%C3%A1fico-13-nivel-asignado-vs-autopercibido">Gr&#xE1;fico 13: Nivel Asignado vs Autopercibido</h2><figure class="kg-card kg-image-card"><img src="https://blog.melizeche.com/content/images/2025/12/grafico13_nivel_asignado_vs_autopercibido.png" class="kg-image" alt="An&#xE1;lisis de la Encuesta de Desarrolladores de Paraguay 2024" loading="lazy" width="1418" height="1347" srcset="https://blog.melizeche.com/content/images/size/w600/2025/12/grafico13_nivel_asignado_vs_autopercibido.png 600w, https://blog.melizeche.com/content/images/size/w1000/2025/12/grafico13_nivel_asignado_vs_autopercibido.png 1000w, https://blog.melizeche.com/content/images/2025/12/grafico13_nivel_asignado_vs_autopercibido.png 1418w" sizes="(min-width: 720px) 720px"></figure><p>Este me pareci&#xF3; interesante. Cruc&#xE9; el nivel que la empresa le asigna a cada dev con el nivel que ellos creen tener.</p>
<!--kg-card-begin: html-->
<table data-line="202" class="code-line" dir="auto" style="border-collapse: collapse; margin-bottom: 0.7em; position: relative; color: rgb(204, 204, 204); font-family: -apple-system, &quot;system-ui&quot;, &quot;Segoe WPC&quot;, &quot;Segoe UI&quot;, system-ui, Ubuntu, &quot;Droid Sans&quot;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead data-line="202" class="code-line" dir="auto" style="position: relative;"><tr data-line="202" class="code-line" dir="auto" style="position: relative;"><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">M&#xE9;trica</th><th style="text-align: left; border-bottom: 1px solid rgba(255, 255, 255, 0.69); padding: 5px 10px; border-top-color: rgba(255, 255, 255, 0.69); border-right-color: rgba(255, 255, 255, 0.69); border-left-color: rgba(255, 255, 255, 0.69);">Valor</th></tr></thead><tbody data-line="204" class="code-line" dir="auto" style="position: relative;"><tr data-line="204" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);"><strong>Coinciden</strong></td><td style="padding: 5px 10px; border-color: rgba(255, 255, 255, 0.18);">69.5%</td></tr><tr data-line="205" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Se sienten subestimados</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">17.7%</td></tr><tr data-line="206" class="code-line" dir="auto" style="position: relative;"><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);"><strong>Se sienten sobrestimados</strong></td><td style="padding: 5px 10px; border-top: 1px solid rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-bottom-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18);">12.9%</td></tr></tbody></table>
<!--kg-card-end: html-->
<ul><li>La mayor&#xED;a (70%) est&#xE1; de acuerdo con su nivel asignado</li><li>Casi&#xA0;<strong>1 de cada 5</strong>&#xA0;cree que merece un nivel m&#xE1;s alto</li><li>Los&#xA0;<strong>Juniors</strong>&#xA0;son los que m&#xE1;s se sienten subestimados (muchos se autoperciben Mid-senior)</li><li>Los&#xA0;<strong>Seniors</strong>&#xA0;tienen alta coincidencia con su autopercepci&#xF3;n</li><li>Muy pocos se sienten sobrestimados</li></ul><h3 id="implicaciones-2">Implicaciones</h3><p>Existe una&#xA0;<strong>brecha de percepci&#xF3;n</strong>&#xA0;principalmente en niveles junior y mid-senior. Las empresas podr&#xED;an mejorar la comunicaci&#xF3;n sobre criterios de nivelaci&#xF3;n. Los desarrolladores que se sienten subestimados podr&#xED;an buscar oportunidades donde su nivel sea mejor reconocido.</p><hr><h2 id="conclusiones">Conclusiones</h2><h3 id="para-desarrolladores">Para desarrolladores</h3><ol><li><strong>El trabajo remoto paga significativamente m&#xE1;s</strong>&#xA0;- Si busc&#xE1;s mejorar tu salario, consider&#xE1; transicionar a remoto</li><li><strong>Empleadores del exterior = 3x m&#xE1;s salario</strong>&#xA0;- Invertir en ingl&#xE9;s y habilidades de comunicaci&#xF3;n remota tiene alto ROI</li><li><strong>La experiencia importa, pero no es todo</strong>&#xA0;- Pod&#xE9;s acelerar tu crecimiento salarial accediendo a mercados internacionales</li></ol><h3 id="para-empresas-locales">Para empresas locales</h3><ol><li><strong>Competir por talento es dif&#xED;cil</strong>&#xA0;- Los salarios del exterior son inalcanzables para la mayor&#xED;a de empresas locales</li><li><strong>El trabajo h&#xED;brido puede ser un diferenciador</strong>&#xA0;- Ofrece flexibilidad sin perder completamente el talento al mercado remoto</li><li><strong>Invertir en desarrollo de carrera</strong>&#xA0;- Si no pod&#xE9;s competir en salario, compet&#xED; en crecimiento profesional y cultura</li></ol><h3 id="para-el-ecosistema">Para el ecosistema</h3><ul><li>El mercado tech paraguayo est&#xE1; madurando pero existe una&#xA0;<strong>fuga de talento</strong>&#xA0;hacia empleadores del exterior.</li><li>Se necesitan m&#xE1;s empresas locales que puedan competir en compensaci&#xF3;n o que ofrezcan equity/beneficios alternativos</li><li>La educaci&#xF3;n formal parece menos relevante que la experiencia pr&#xE1;ctica y las habilidades t&#xE9;cnicas</li></ul><hr><h2 id="limitaciones-del-an%C3%A1lisis">Limitaciones del An&#xE1;lisis</h2><p>Antes de sacar conclusiones definitivas, es importante entender las limitaciones de estos datos.</p><p>Esta encuesta fue respondida voluntariamente por desarrolladores que participan activamente en comunidades tech online. Esto significa que&#xA0;<strong>ciertos perfiles pueden estar subrepresentados</strong>: desarrolladores en empresas tradicionales, el sector p&#xFA;blico, o quienes simplemente no frecuentan estas comunidades digitales. Los 394 encuestados no necesariamente reflejan al &quot;desarrollador promedio&quot; de Paraguay, sino a un segmento espec&#xED;fico del ecosistema.</p><p>Otra limitaci&#xF3;n importante es la&#xA0;<strong>falta de datos geogr&#xE1;ficos</strong>. No sabemos si los encuestados trabajan en Asunci&#xF3;n, Ciudad del Este, o el interior del pa&#xED;s. Es probable que existan diferencias salariales significativas entre la capital y otras ciudades, pero este an&#xE1;lisis no puede capturarlas.</p><p>Los&#xA0;<strong>salarios fueron reportados en rangos</strong>&#xA0;(por ejemplo, &quot;Entre 7.000.001 a 9.000.000 gs&quot;) en lugar de valores exactos. Para los c&#xE1;lculos de promedios y medianas, utilizamos el punto medio de cada rango, lo cual introduce cierta imprecisi&#xF3;n. Adem&#xE1;s, al ser datos auto-reportados, algunos encuestados pueden haber redondeado, exagerado o subestimado sus ingresos reales.</p><p>Un punto cr&#xED;tico es que&#xA0;<strong>las variables est&#xE1;n confundidas entre s&#xED;</strong>. Cuando decimos que &quot;el trabajo remoto paga m&#xE1;s&quot;, no podemos separar si es la modalidad en s&#xED; la que genera mejores salarios, o si simplemente quienes trabajan remoto tienden a hacerlo para empleadores del exterior (que pagan en d&#xF3;lares). Lo mismo ocurre con la experiencia: un desarrollador senior que gana bien podr&#xED;a estar ganando m&#xE1;s por su seniority, por trabajar remoto, por su stack tecnol&#xF3;gico, o por una combinaci&#xF3;n de todos estos factores. Este an&#xE1;lisis muestra correlaciones, no causalidades.</p><p>Finalmente, estos resultados tienen una&#xA0;<strong>generalizaci&#xF3;n limitada</strong>. Reflejan la situaci&#xF3;n de un grupo espec&#xED;fico de desarrolladores paraguayos en abril de 2024. No se pueden extrapolar a otros pa&#xED;ses, a otros momentos en el tiempo, ni siquiera a la totalidad del mercado tech paraguayo. Las tendencias aqu&#xED; presentadas son indicativas, no verdades absolutas.</p><p>Con estas consideraciones en mente, los datos siguen siendo valiosos para entender tendencias generales y tomar decisiones informadas, siempre que se interpreten con la cautela apropiada.</p><hr><p>&#xBF;Y si hacemos una encuesta nueva este a&#xF1;o? &#xBF;Qu&#xE9; preguntas cre&#xE9;s que faltan? Dej&#xE1; tu respuesta en los comentarios</p><hr><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #F0F0F0; display: none;">
            
            <div class="kg-signup-card-content">
                
                <div class="kg-signup-card-text ">
                    <h2 class="kg-signup-card-heading" style="color: #000000;"><span style="white-space: pre-wrap;">&#xBF;Quer&#xE9;s m&#xE1;s contenido como este?</span><br><br><span style="white-space: pre-wrap;">Suscribite sin costo a &#x2022; El Otro Blog &#x2022;</span></h2>
                    <p class="kg-signup-card-subheading" style="color: #000000;"><span style="white-space: pre-wrap;">C&#xF3;digo y Cafe&#xED;na</span></p>
                    
        <form class="kg-signup-card-form" data-members-form="signup">
            
            <div class="kg-signup-card-fields">
                <input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
                <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
                    <span class="kg-signup-card-button-default">Subscribe</span>
                    <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
        <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
                <circle cx="4" cy="12" r="3"/>
                <circle cx="12" cy="12" r="3"/>
                <circle cx="20" cy="12" r="3"/>
            </g>
            <style data-cap="butt">
                .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
                .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
                .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
                .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
                .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
                @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
            </style>
        </g>
    </svg></span>
                </button>
            </div>
            <div class="kg-signup-card-success" style="color: #000000;">
                Email sent! Check your inbox to complete your signup.
            </div>
            <div class="kg-signup-card-error" style="color: #000000;" data-members-error></div>
        </form>
        
                    <p class="kg-signup-card-disclaimer" style="color: #000000;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
                </div>
            </div>
        </div><h2 id="metodolog%C3%ADa">Metodolog&#xED;a</h2><ul><li><strong>Fuente</strong>: Encuesta DevPy 2024 (ProyectosBeta)</li><li><strong>Respuestas</strong>: 394 desarrolladores</li><li><strong>Per&#xED;odo</strong>: Abril 2024</li><li><strong>An&#xE1;lisis</strong>: Python (Pandas, Matplotlib)</li><li><strong>Gr&#xE1;ficos</strong>: 13 visualizaciones est&#xE1;ticas</li></ul><hr><p><em>Los datos de este an&#xE1;lisis provienen de la Encuesta de Desarrolladores de Paraguay 2024 de ProyectosBeta. Los gr&#xE1;ficos fueron generados con Python.</em></p>]]></content:encoded></item><item><title><![CDATA[Mi Primer CVE: CVE-2025-64708]]></title><description><![CDATA[Cómo encontré un bug de seguridad en mi propio laburo]]></description><link>https://blog.melizeche.com/mi-primer-cve-cve-2025-64708/</link><guid isPermaLink="false">69277f38838c21355bd9691d</guid><category><![CDATA[cve]]></category><category><![CDATA[cve-2025-64708]]></category><category><![CDATA[authentik]]></category><category><![CDATA[security]]></category><category><![CDATA[IdP]]></category><category><![CDATA[disclosure]]></category><category><![CDATA[bug]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Wed, 26 Nov 2025 22:45:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1585079542156-2755d9c8a094?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxoYWNrfGVufDB8fHx8MTc2NDE5NzQ5N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1585079542156-2755d9c8a094?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE2fHxoYWNrfGVufDB8fHx8MTc2NDE5NzQ5N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Mi Primer CVE: CVE-2025-64708"><p>Trabajo como desarrollador en <a href="https://goauthentik.io/?ref=blog.melizeche.com">authentik</a>, un Identity Provider open-source muy utilizado. Y bueno, resulta que encontr&#xE9; una vulnerabilidad que termin&#xF3; siendo mi primer CVE: <strong>CVE-2025-64708</strong>.</p><h2 id="%C2%BFqu%C3%A9-es-un-cve">&#xBF;Qu&#xE9; es un CVE?</h2><p>CVE (Common Vulnerabilities and Exposures) es un&#xA0;sistema&#xA0;est&#xE1;ndar para&#xA0;identificar y catalogar vulnerabilidades de&#xA0;seguridad. Cada vulnerabilidad recibe un identificador &#xFA;nico (como&#xA0;CVE-2025-64708) que permite a&#xA0;investigadores,&#xA0;desarrolladores y administradores de sistemas hablar del&#xA0;mismo problema&#xA0;sin&#xA0;ambig&#xFC;edades.&#xA0;Cuando una&#xA0;vulnerabilidad recibe un CVE, queda&#xA0;registrada en bases&#xA0;de datos p&#xFA;blicas como la del&#xA0;<a href="https://nvd.nist.gov/?ref=blog.melizeche.com" rel="noopener noreferrer">NIST</a>, lo&#xA0;que facilita el seguimiento y la coordinaci&#xF3;n de&#xA0;parches a&#xA0;nivel&#xA0;global.</p><p>Que&#xA0;una organizaci&#xF3;n publique un CVE no es algo malo, al contrario, es se&#xF1;al de transparencia en&#xA0;su proceso de seguridad.&#xA0;Significa que la organizaci&#xF3;n tiene mecanismos para identificar y corregir vulnerabilidades de forma responsable, en lugar de esconderlas. Las&#xA0;empresas que nunca publican CVEs no necesariamente tienen software m&#xE1;s&#xA0;seguro; muchas veces simplemente no tienen un proceso de disclosure o&#xA0;prefieren no ser transparentes.</p><h2 id="%C2%BFqu%C3%A9-pasaba">&#xBF;Qu&#xE9; pasaba?</h2><p>El tema era con las <strong>invitaciones expiradas</strong>. En versiones anteriores, las invitaciones se consideraban v&#xE1;lidas aunque ya hayan vencido. El sistema depend&#xED;a de tareas en segundo plano para limpiar las invitaciones viejas.</p><p>En un escenario normal, esto pod&#xED;a tardar hasta <strong>5 minutos</strong> porque la limpieza estaba programada para correr cada 5 minutos. Pero si hab&#xED;a muchas tareas en la cola, pod&#xED;a tardar m&#xE1;s todav&#xED;a.</p><p>O sea que alguien con un link de invitaci&#xF3;n vencido pod&#xED;a usarlo durante esa ventana de tiempo. Aunque sea poco probable que se explote esa vulnerabilidad, dadas las condiciones que se deben dar, no est&#xE1; bien que se pueda.</p><h2 id="los-datos-t%C3%A9cnicos">Los datos t&#xE9;cnicos</h2><ul><li><strong>CVE ID:</strong> CVE-2025-64708</li><li><strong>CVSS Score:</strong> 5.3 - 5.8 (MEDIUM)</li><li><strong>CWE:</strong> CWE-613 (Insufficient Session Expiration)</li><li><strong>Vector:</strong> Red, sin autenticaci&#xF3;n requerida</li></ul><h2 id="el-fix">El fix</h2><p>Como trabajo en el proyecto, pude coordinar directamente con el equipo. La soluci&#xF3;n sali&#xF3; en las versiones:</p><ul><li><strong>2025.8.5</strong></li><li><strong>2025.10.2</strong></li></ul><p>El commit: <a href="https://github.com/goauthentik/authentik/commit/6672e6aaa41e0f2c9bfb1e4d8b51cf114969e830?ref=blog.melizeche.com">6672e6a</a></p><p>Para los que no pueden actualizar todav&#xED;a, hay un workaround con un <a href="https://docs.goauthentik.io/customize/policies/expression/?ref=blog.melizeche.com" rel="noreferrer">expression policy</a>:</p><pre><code class="language-python">return not context[&apos;flow_plan&apos;].context[&apos;invitation&apos;].is_expired
</code></pre><h2 id="c%C3%B3mo-maneja-authentik-la-seguridad">C&#xF3;mo maneja authentik la seguridad</h2><p>authentik se toma la seguridad muy en serio y sigue las reglas de <a href="https://en.wikipedia.org/wiki/Responsible_disclosure?ref=blog.melizeche.com">responsible disclosure</a>. El proceso es bastante claro:</p><ol><li>Se reporta la vulnerabilidad por email a <a>security@goauthentik.io</a> o a trav&#xE9;s del <a href="https://github.com/goauthentik/authentik/security/advisories/new?ref=blog.melizeche.com">portal de advisories de GitHub</a>.</li><li>El equipo de seguridad intenta reproducir el problema y pide m&#xE1;s informaci&#xF3;n si es necesario.</li><li>Se asigna un nivel de severidad usando el <a href="https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?ref=blog.melizeche.com">calculador CVSS de NVD</a>.</li><li>Se crea un fix y si es posible, el reporter lo testea.</li><li>El fix se backportea a otras versiones soportadas y se crea un workaround si es posible.</li><li>Se env&#xED;a un anuncio con la fecha de release y el nivel de severidad al menos 24 horas antes del release (normalmente se da m&#xE1;s tiempo para que los usuarios puedan planificar la actualizaci&#xF3;n).</li><li>Se publica la versi&#xF3;n corregida.</li></ol><p>Aunque no hay bounties monetarios, authentik reconoce a los investigadores publicando una entrada en la p&#xE1;gina de Security Advisory con el nombre o alias del reporter.</p><h2 id="lo-que-aprend%C3%AD">Lo que aprend&#xED;</h2><p>Conseguir mi primer CVE fue una experiencia muy buena. Algunas cosas que rescato:</p><ol><li><strong>Las vulnerabilidades no siempre son rebuscadas:</strong> A veces son problemas de timing como este, nada del otro mundo.</li><li><strong>Estar adentro del proyecto ayuda:</strong> Conocer el c&#xF3;digo te permite ver cosas que de afuera capaz no not&#xE1;s.</li><li><strong>El proceso de disclosure es importante: </strong>Aunque sea tu propio proyecto, hay que seguir el proceso correcto para que los usuarios tengan tiempo de actualizar.</li></ol><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #F0F0F0; display: none;">
            
            <div class="kg-signup-card-content">
                
                <div class="kg-signup-card-text ">
                    <h2 class="kg-signup-card-heading" style="color: #000000;"><span style="white-space: pre-wrap;">Suscribite sin costo a &#x2022; El Otro Blog &#x2022;</span></h2>
                    <p class="kg-signup-card-subheading" style="color: #000000;"><span style="white-space: pre-wrap;">C&#xF3;digo y Cafe&#xED;na</span></p>
                    
        <form class="kg-signup-card-form" data-members-form="signup">
            
            <div class="kg-signup-card-fields">
                <input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
                <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
                    <span class="kg-signup-card-button-default">Subscribe</span>
                    <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
        <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
                <circle cx="4" cy="12" r="3"/>
                <circle cx="12" cy="12" r="3"/>
                <circle cx="20" cy="12" r="3"/>
            </g>
            <style data-cap="butt">
                .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
                .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
                .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
                .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
                .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
                @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
            </style>
        </g>
    </svg></span>
                </button>
            </div>
            <div class="kg-signup-card-success" style="color: #000000;">
                Email sent! Check your inbox to complete your signup.
            </div>
            <div class="kg-signup-card-error" style="color: #000000;" data-members-error></div>
        </form>
        
                    <p class="kg-signup-card-disclaimer" style="color: #000000;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
                </div>
            </div>
        </div><h2 id="referencias">Referencias</h2><ul><li></li></ul><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://docs.goauthentik.io/security/cves/CVE-2025-64708/?ref=blog.melizeche.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">CVE-2025-64708 | authentik</div><div class="kg-bookmark-description">Reported by @melizeche</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.melizeche.com/content/images/icon/icon-5.png" alt="Mi Primer CVE: CVE-2025-64708"><span class="kg-bookmark-author">authentik logo</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.melizeche.com/content/images/thumbnail/social-5.png" alt="Mi Primer CVE: CVE-2025-64708" onerror="this.style.display = &apos;none&apos;"></div></a></figure><ul><li><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-64708?ref=blog.melizeche.com">NVD - CVE-2025-64708</a></li><li><a href="https://github.com/goauthentik/authentik/security/advisories/GHSA-ch7q-53v8-73pc?ref=blog.melizeche.com">GitHub Security Advisory - GHSA-ch7q-53v8-73pc</a></li><li><a href="https://docs.goauthentik.io/security/policy/?ref=blog.melizeche.com">Security Policy de authentik</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Evento MVP: "Requisitos" mínimos para organizar un evento de comunidad]]></title><description><![CDATA[¡Buenas noticias! No hay requisitos duros ni una forma "correcta" de organizar un evento. Pero planificar con anticipación puede mejorar tu evento y tu experiencia como organizador.]]></description><link>https://blog.melizeche.com/evento-mvp-requisitos-minimos-para-organizar-un-evento-de-comunidad/</link><guid isPermaLink="false">69278721838c21355bd96968</guid><category><![CDATA[pycon]]></category><category><![CDATA[comunidad]]></category><category><![CDATA[eventos]]></category><category><![CDATA[meetups]]></category><category><![CDATA[networking]]></category><category><![CDATA[voluntariado]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Tue, 25 Nov 2025 23:21:00 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2025/11/unnamed-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.melizeche.com/content/images/2025/11/unnamed-1.jpg" alt="Evento MVP: &quot;Requisitos&quot; m&#xED;nimos para organizar un evento de comunidad"><p>Esto es algo en lo que trabaj&#xE9; durante los Sprints de PyCon US 2025. Es parte de una gu&#xED;a m&#xE1;s completa, pero quer&#xED;a compartirlo en alg&#xFA;n lado mientras tanto. Originalmente publicado en ingl&#xE9;s: <a href="https://blog.melizeche.com/event-mvp-minimum-requirements-for-organizing-a-community-event/" rel="noreferrer">Event MVP: Minimum &#x201C;requirements&#x201D; for organizing a community event </a></p><p>Los eventos online pueden ser pr&#xE1;cticos, pero <mark>los eventos presenciales son esenciales para construir comunidad</mark>. Hay muchos tipos de eventos que pod&#xE9;s organizar, y no necesitan ser complicados ni &quot;perfectos&quot; para ser efectivos.</p><p>No necesit&#xE1;s mucha gente para que un evento sea un &#xE9;xito, generalmente las comunidades y los eventos empiezan chiquitos y crecen de forma org&#xE1;nica.</p><p>Algunos ejemplos de eventos son:</p><ul><li><strong>Meetups de comunidad:</strong> Encuentros casuales para hacer networking, compartir novedades y tirar ideas.</li><li><strong>Noches de charlas / Lightning Talks:</strong> Miembros de la comunidad comparten conocimiento en charlas cortas (5&#x2013;20 min).</li><li><strong>Caf&#xE9; y charla / Horarios abiertos:</strong> Encuentros informales regulares, virtuales o presenciales.</li><li><strong>Talleres:</strong> Sesiones pr&#xE1;cticas (ej: intro a Git, frameworks de testing, contribuir a OSS).</li><li><strong>Grupos de estudio:</strong> Encuentros regulares para aprender una herramienta, framework o lenguaje juntos.</li><li><strong>Sesiones de coworking:</strong> Juntarse en una cafeter&#xED;a o un lugar similar para trabajar.</li></ul><p>Organizar un evento no es necesariamente complicado, pero puede llevar tiempo&#x2014;por eso tener un checklist ayuda, especialmente para dividir tareas.</p><h2 id="%E2%9C%85-ejemplo-de-checklist-para-un-meetup-presencial-con-charlas">&#x2705; Ejemplo de Checklist para un Meetup Presencial con Charlas</h2><ul><li>Definir la fecha y hora (busc&#xE1; el d&#xED;a de la semana que mejor le funcione a tu comunidad).</li><li>Conseguir un lugar &#x2014; empresas de tecnolog&#xED;a locales o universidades a veces pueden hostear el evento.</li><li>Llamado a charlas &#x2014; pregunt&#xE1; en grupos de tech, por DM, etc.</li><li>Ser persistente &#x2014; hac&#xE9; seguimiento y reconfirm&#xE1; charlas, talleres u otras actividades.</li><li>Crear el evento en <a href="https://meetup.com/?ref=blog.melizeche.com">meetup.com</a>; pod&#xE9;s duplicar un evento anterior.</li><li>Hacer un flyer (pod&#xE9;s reutilizar dise&#xF1;os de eventos pasados o usar <a href="https://canva.com/?ref=blog.melizeche.com">canva.com</a>):<ul><li>Logo</li><li>Fecha</li><li>Hora</li><li>Lugar</li><li>Charlas, talleres, actividades</li><li>Link del evento en Meetup</li></ul></li><li>Publicar en redes sociales (inclu&#xED; tanto el flyer como los detalles del evento).</li><li>Compartir el evento en otros grupos o comunidades de IT.</li><li>Mandar recordatorios del evento en tu grupo cada algunos d&#xED;as &#x2014; especialmente el d&#xED;a anterior y el d&#xED;a del evento.</li></ul><p><strong>Template para Twitter/Telegram/Discord/etc</strong></p><pre><code>&#x1F4BB;&#x1F40D; @{{ Nombre de la Comunidad }} Meetup {{mes}} {{a&#xF1;o}}
&#x1F4C5; Viernes {{dd}}/{{mm}}
&#x231A; {{hh}}:{{mm}}hs
&#x1F4CC; {{ lugar }}

&#x2605; {{persona1}}: &quot;{{T&#xED;tulo charla 1}}&quot;
&#x2605; {{persona2}}: &quot;{{T&#xED;tulo charla 2}}&quot;

&#xA1;Entrada libre!
Ubicaci&#xF3;n e inscripci&#xF3;n:
https://bit.ly/.......
</code></pre><p>Para diferentes tipos de eventos, el checklist probablemente va a ser diferente. Una buena idea es revisar el checklist despu&#xE9;s de tu evento, y si hubo lecciones aprendidas o cosas para mejorar la pr&#xF3;xima vez, actualizarlo.</p><h2 id="%E2%9C%A8-tips-adicionales-para-organizar-eventos">&#x2728; Tips Adicionales para Organizar Eventos</h2><ul><li><strong>Empez&#xE1; simple y manten&#xE9; los costos bajos</strong> &#x2014; tanto de tiempo como de plata. Por ejemplo, el caf&#xE9; y la comida pueden mejorar la experiencia, pero no son esenciales. No los incluyas en tus eventos a menos que los costos se cubran f&#xE1;cil, como con un sponsor.</li><li><strong>Celebr&#xE1; los peque&#xF1;os logros.</strong> Agradec&#xE9; a los voluntarios y speakers, y destac&#xE1; lo que sali&#xF3; bien. Eso motiva a m&#xE1;s gente a involucrarse la pr&#xF3;xima vez.</li><li><strong>Manten&#xE9; una lista de lugares donde hiciste eventos</strong>, junto con la persona de contacto. Puede ser &#xFA;til para planificar eventos futuros o si alguien m&#xE1;s tiene que organizar el pr&#xF3;ximo.</li><li><strong>&#xA1;Sac&#xE1; fotos!</strong> Guardar recuerdos est&#xE1; bueno y pod&#xE9;s usar las fotos para promocionar eventos futuros. Solo asegurate de tener permiso de la gente en las fotos antes de compartirlas p&#xFA;blicamente.</li><li><strong>Invit&#xE1; a los asistentes a dar una charla en el pr&#xF3;ximo evento</strong> o a ayudar a organizarlo.</li><li><strong>Ped&#xED; feedback</strong> sobre qu&#xE9; podr&#xED;as mejorar para el pr&#xF3;ximo evento.</li><li><strong>Empez&#xE1; y termin&#xE1; con comunidad.</strong> Dej&#xE1; tiempo antes/despu&#xE9;s del evento para que la gente charle. La comunidad muchas veces crece en los espacios entre las actividades programadas.</li><li><strong>Document&#xE1; todo.</strong> Cre&#xE1; carpetas o documentos compartidos para checklists, templates, presupuestos, flyers, etc. Te va a ahorrar un mont&#xF3;n de tiempo a vos y a otros cuando organicen eventos futuros.</li></ul><p>&#xBF;Ten&#xE9;s alg&#xFA;n tip o sugerencia para agregar a esta gu&#xED;a? Dej&#xE1; un comentario &#x1F64C;</p><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #F0F0F0; display: none;">
            
            <div class="kg-signup-card-content">
                
                <div class="kg-signup-card-text ">
                    <h2 class="kg-signup-card-heading" style="color: #000000;"><span style="white-space: pre-wrap;">Suscribite sin costo a &#x2022; El Otro Blog &#x2022;</span></h2>
                    <p class="kg-signup-card-subheading" style="color: #000000;"><span style="white-space: pre-wrap;">C&#xF3;digo y Cafe&#xED;na</span></p>
                    
        <form class="kg-signup-card-form" data-members-form="signup">
            
            <div class="kg-signup-card-fields">
                <input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
                <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
                    <span class="kg-signup-card-button-default">Subscribe</span>
                    <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
        <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
                <circle cx="4" cy="12" r="3"/>
                <circle cx="12" cy="12" r="3"/>
                <circle cx="20" cy="12" r="3"/>
            </g>
            <style data-cap="butt">
                .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
                .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
                .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
                .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
                .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
                @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
            </style>
        </g>
    </svg></span>
                </button>
            </div>
            <div class="kg-signup-card-success" style="color: #000000;">
                Email sent! Check your inbox to complete your signup.
            </div>
            <div class="kg-signup-card-error" style="color: #000000;" data-members-error></div>
        </form>
        
                    <p class="kg-signup-card-disclaimer" style="color: #000000;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
                </div>
            </div>
        </div>]]></content:encoded></item><item><title><![CDATA[Event MVP: Minimum “requirements” for organizing a community event]]></title><description><![CDATA[Good news! There are no hard requirements or one "correct" way to organize an event. But planning ahead can improve your event and your experience as an organizer. ]]></description><link>https://blog.melizeche.com/event-mvp-minimum-requirements-for-organizing-a-community-event/</link><guid isPermaLink="false">682ccbcea7e17bb766a4194d</guid><category><![CDATA[pycon]]></category><category><![CDATA[events]]></category><category><![CDATA[community]]></category><category><![CDATA[english]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Tue, 20 May 2025 18:56:48 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2025/11/image.psd.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.melizeche.com/content/images/2025/11/image.psd.jpg" alt="Event MVP: Minimum &#x201C;requirements&#x201D; for organizing a community event"><p>This is something I worked on during the PyCon US 2025 Sprints. It&apos;s part of a more comprehensive guide, but I wanted to share it somewhere in the meantime. It will also be translated into Spanish later.</p><hr><p><strong>Good news! There are no hard requirements or one &quot;correct&quot; way to organize an event. </strong>But planning ahead can improve your event and your experience as an organizer.&#xA0;</p><p><strong>In-person events help build community.</strong> There are many types of events you can organize, and they don&#x2019;t need to be complicated or &#x201C;perfect&#x201D; to be effective.&#xA0;</p><p>You don&#x2019;t need a lot of people for an event to be a success, usually communities and events start little and they grow organically.&#xA0;</p><p>Some examples of events are:</p><ul><li><strong>Community Meetups</strong>: Casual gatherings for networking, sharing updates, and brainstorming.</li><li><strong>Talk Nights / Lightning Talks</strong>: Community members share knowledge in short talks (5&#x2013;20 min).</li><li><strong>Coffee Chats / Open Hours</strong>: Regular informal virtual/in-person hangouts.</li><li><strong>Workshops</strong>: Hands-on sessions (e.g., intro to Git, testing frameworks, contributing to OSS).</li><li><strong>Study Groups</strong>: Regular meetups to learn a tool, framework, or language together.</li><li><strong>Coworking sessions:</strong> Meet in a local coffee store or somewhere similar to work.</li></ul><p>Organizing an event isn&#x2019;t necessarily complicated, but it can take time&#x2014;so having a checklist is helpful, especially to divide tasks.</p><h3 id="%E2%9C%85-example-checklist-for-an-in-person-meetup-with-talks"><strong>&#x2705; Example Checklist for an In-Person Meetup with Talks</strong></h3><ul><li>Set the date and time (Find the day of the week that works best for your community).</li><li>Find a venue &#x2014; local tech companies or universities can sometimes host the event.</li><li>Call for talks &#x2014; ask in tech groups, via DM, etc.</li><li>Be persistent &#x2014; follow up and reconfirm talks, workshops, or other activities.</li><li>Create the event on<a href="https://meetup.com/?ref=blog.melizeche.com"> <u>meetup.com</u></a>; you can duplicate a previous event.</li><li>Make a flyer (you can reuse designs from past events or use<a href="https://canva.com/?ref=blog.melizeche.com"> <u>canva.com</u></a>):<ul><li>Logo</li><li>Date</li><li>Time</li><li>Venue</li><li>Talks, workshops, activities</li><li>Meetup event link</li></ul></li><li>Post on social media (include both the flyer and event details).</li><li>Share the event in other IT groups or communities.</li><li>Send reminders of the event in your group every few days &#x2014; especially the day before and the day of the event.</li></ul><p><strong>Template for Twitter/Telegram/Discord/etc</strong></p>
<!--kg-card-begin: html-->
<table style="border:none;border-collapse:collapse;"><colgroup><col width="667"></colgroup><tbody><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:12pt;margin-bottom:12pt;"><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x1F4BB;&#x1F40D; @{{ Community Name }} Meetup {{month}} {{year}}</span></p><p dir="ltr" style="line-height:1.38;margin-top:12pt;margin-bottom:12pt;"><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x1F4C5; Friday {{dd}}/{{mm}}</span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><br></span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x231A; {{hh}}:{{mm}}hs</span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><br></span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x1F4CC; {{ location }}</span></p><p dir="ltr" style="line-height:1.38;margin-top:12pt;margin-bottom:12pt;"><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x2605; {{person1}}: &quot;{{Talk title 1}}&quot;</span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><br></span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">&#x2605; {{person2}}: &quot;{{Talk title 2}}&quot;</span></p><p dir="ltr" style="line-height:1.38;margin-top:12pt;margin-bottom:12pt;"><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Free entry!</span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><br></span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Location and registration:</span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"><br></span><span style="font-size:11pt;font-family:&apos;Courier New&apos;,monospace;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">https://bit.ly/.......</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p></p><p>For different types of events, the checklist will probably be different. A good idea is to <strong>review the checklist after your event</strong>, and if there were any lessons learned or things to improve for next time, update it accordingly.</p><p></p><h2 id="%E2%9C%A8-additional-tips-for-organizing-events">&#x2728; Additional Tips for Organizing Events</h2><ul><li><strong>Start simple</strong> and keep costs&#x2014;both time and money&#x2014;low. For example, coffee and food can enhance the experience, but they&#x2019;re not essential. Don&#x2019;t include them in your events unless the costs are easily covered, such as through a sponsor.</li><li><strong>Celebrate small wins.</strong> Thank volunteers and speakers, and highlight what went well. It encourages more people to get involved next time.</li><li>Keep a list of venues where you&apos;ve hosted events, along with the contact person. This can be useful for planning future events or if someone else needs to organize the next one.</li><li><strong>Take pictures!</strong> Keeping memories is great and you can use the pictures to promote future events. Just make sure you have permission from the people in the photos before sharing them publicly.</li><li><strong>Invite attendees to give a talk </strong>at the next event or to help organize it.</li><li><strong>Ask for feedback</strong> on what you could improve for the next event.</li><li><strong>Start and end with community.</strong> Give time before/after the event for people to talk. Community often grows in the gaps between the scheduled activities.</li><li><strong>Document everything. </strong>Create shared folders or documents for checklists, templates, budgets, flyers, etc. It&apos;ll save you and others tons of time when organizing future events.</li></ul><hr><p>Do you have any tips or suggestions to add to this guide? Please leave a comment &#x1F64C;</p><div class="kg-card kg-signup-card kg-width-wide " data-lexical-signup-form style="background-color: #F0F0F0; display: none;">
            
            <div class="kg-signup-card-content">
                
                <div class="kg-signup-card-text ">
                    <h2 class="kg-signup-card-heading" style="color: #000000;"><span style="white-space: pre-wrap;">Suscribite sin costo a &#x2022; El Otro Blog &#x2022;</span></h2>
                    <p class="kg-signup-card-subheading" style="color: #000000;"><span style="white-space: pre-wrap;">C&#xF3;digo y Cafe&#xED;na</span></p>
                    
        <form class="kg-signup-card-form" data-members-form="signup">
            
            <div class="kg-signup-card-fields">
                <input class="kg-signup-card-input" id="email" data-members-email type="email" required="true" placeholder="Your email">
                <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
                    <span class="kg-signup-card-button-default">Subscribe</span>
                    <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewbox="0 0 24 24">
        <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
                <circle cx="4" cy="12" r="3"/>
                <circle cx="12" cy="12" r="3"/>
                <circle cx="20" cy="12" r="3"/>
            </g>
            <style data-cap="butt">
                .nc-loop-dots-4-24-icon-o{--animation-duration:0.8s}
                .nc-loop-dots-4-24-icon-o *{opacity:.4;transform:scale(.75);animation:nc-loop-dots-4-anim var(--animation-duration) infinite}
                .nc-loop-dots-4-24-icon-o :nth-child(1){transform-origin:4px 12px;animation-delay:-.3s;animation-delay:calc(var(--animation-duration)/-2.666)}
                .nc-loop-dots-4-24-icon-o :nth-child(2){transform-origin:12px 12px;animation-delay:-.15s;animation-delay:calc(var(--animation-duration)/-5.333)}
                .nc-loop-dots-4-24-icon-o :nth-child(3){transform-origin:20px 12px}
                @keyframes nc-loop-dots-4-anim{0%,100%{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
            </style>
        </g>
    </svg></span>
                </button>
            </div>
            <div class="kg-signup-card-success" style="color: #000000;">
                Email sent! Check your inbox to complete your signup.
            </div>
            <div class="kg-signup-card-error" style="color: #000000;" data-members-error></div>
        </form>
        
                    <p class="kg-signup-card-disclaimer" style="color: #000000;"><span style="white-space: pre-wrap;">No spam. Unsubscribe anytime.</span></p>
                </div>
            </div>
        </div>]]></content:encoded></item><item><title><![CDATA[¿Qué tan rápido es el DNS que usas? Comparativa de rendimiento de DNS]]></title><description><![CDATA[Con el anuncio de parte de Cloudflare de un nuevo servicio de DNS y viendo malos benchmarks(solo ping) decidí hacer una comparativa local más detallada...]]></description><link>https://blog.melizeche.com/que-tan-rapido-es-el-dns-que-usas/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1ca7</guid><category><![CDATA[google]]></category><category><![CDATA[Tigo]]></category><category><![CDATA[paraguay]]></category><category><![CDATA[dns]]></category><category><![CDATA[cloudflare]]></category><category><![CDATA[ibm]]></category><category><![CDATA[quad9]]></category><category><![CDATA[copaco]]></category><category><![CDATA[velocidad]]></category><category><![CDATA[seguridad]]></category><category><![CDATA[censura]]></category><category><![CDATA[openDNS]]></category><category><![CDATA[1.1.1.1]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Tue, 03 Apr 2018 09:59:08 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2018/04/t1phonebook.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.melizeche.com/content/images/2018/04/t1phonebook.jpg" alt="&#xBF;Qu&#xE9; tan r&#xE1;pido es el DNS que usas? Comparativa de rendimiento de DNS"><p>Con el anuncio de parte de Cloudflare de un <a href="https://blog.cloudflare.com/dns-resolver-1-1-1-1/?ref=blog.melizeche.com">nuevo servicio de resoluci&#xF3;n de DNS</a> y viendo benchmarks que solo tomaban en cuenta el ping al servidor se me ocurri&#xF3; hacer una comparativa local de rendimiento de distintos servicios de DNS.</p>
<h3 id="%C2%BFpero-qu%C3%A9-es-dns-ultrasimplificado">&#xBF;Pero qu&#xE9; es DNS? <s>ultrasimplificado</s></h3>
<p>Todo sitio o servicio que &quot;existe&quot; en Internet tiene asignada una direcci&#xF3;n IP, como las direcciones IP son dif&#xED;ciles de recordar se cre&#xF3; el <strong>DNS</strong> (<em>Domain Name System</em>) que sin dar muchas vueltas es una especie de &quot;gu&#xED;a telef&#xF3;nica&quot; de Internet; es el responsable de saber que nombre de dominio pertenece a cual direcci&#xF3;n IP, por ejemplo <code>melizeche.com</code> apunta al IP <code>173.230.137.131</code>.<br>
Para m&#xE1;s(y mejor) info est&#xE1; la <a href="https://es.wikipedia.org/wiki/Sistema_de_nombres_de_dominio?ref=blog.melizeche.com">Wikipedia</a> :)</p>
<h3 id="el-problema">El problema</h3>
<p>Generalmente si uno no especifica que servidor DNS utilizar tu proveedor de internet te asigna uno autom&#xE1;ticamente, cosa que no suele ser la mejor opci&#xF3;n debido a posibles fallas del mismo proveedor o inclusive pueden ser <strong>utilizados para censurar sitios</strong> de internet. En <strong>Paraguay</strong> hay un <a href="http://usuariospy.blogspot.com/2008/04/censura-de-internet-en-paraguay.html?ref=blog.melizeche.com">nefasto antecedente</a> de esto de <a href="http://www.abc.com.py/edicion-impresa/economia/denuncian-censura-por-parte-de-copaco-1057695.html?ref=blog.melizeche.com">parte de Copaco</a>.</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">everywhere twitter everywhere resistance <br>walls from istanbul<a href="https://twitter.com/hashtag/direntwitter?src=hash&amp;ref_src=twsrc%5Etfw&amp;ref=blog.melizeche.com">#direntwitter</a> <a href="https://twitter.com/hashtag/resisttwitter?src=hash&amp;ref_src=twsrc%5Etfw&amp;ref=blog.melizeche.com">#resisttwitter</a> <a href="https://twitter.com/hashtag/TurkeyBlockedTwitter?src=hash&amp;ref_src=twsrc%5Etfw&amp;ref=blog.melizeche.com">#TurkeyBlockedTwitter</a> <a href="http://t.co/JEoUyOkDv2?ref=blog.melizeche.com">pic.twitter.com/JEoUyOkDv2</a></p>&#x2014; Bi&#xE7;da (@bicda) <a href="https://twitter.com/bicda/status/446939161669271553?ref_src=twsrc%5Etfw&amp;ref=blog.melizeche.com">March 21, 2014</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Adem&#xE1;s otros servidores de DNS pueden ofrecer otros servicios como bloqueo de publicidad o <strong>mejores condiciones de privacidad</strong>; la mayor&#xED;a del tr&#xE1;fico DNS <strong>no est&#xE1; cifrado</strong> lo que facilita el tracking por parte del proveedor u otros actores <em>&quot;maliciosos&quot;</em>.</p>
<h3 id="las-opciones">Las opciones</h3>
<p>Debido a la importancia de los servidores DNS con el tiempo fueron surgiendo distintas opciones. Empresas como <strong>Google, Cisco, IBM</strong>, entre otras lanzaron sus servicios de DNS cada uno con distintas prestaciones y/o promesas.</p>
<p>Pero sin mas preambulos los servicios de DNS que vamos a testear son:</p>
<ul>
<li><a href="https://developers.google.com/speed/public-dns/?ref=blog.melizeche.com">Google Public DNS</a></li>
<li><a href="https://1.1.1.1/?ref=blog.melizeche.com">Cloudflare 1.1.1.1</a></li>
<li><a href="https://use.opendns.com/?ref=blog.melizeche.com">OpenDNS</a></li>
<li><a href="https://www.quad9.net/?ref=blog.melizeche.com">IBM Quad9</a></li>
<li>DNS de Tigo Paraguay (186.16.16.16)</li>
</ul>
<h2 id="benchmark">Benchmark</h2>
<p>El problema con algunos &quot;benchmarks&quot; que vi en estos d&#xED;as es que solo lo hac&#xED;an con ping cosa que no es suficiente porque no toma en cuenta el tiempo que tarda en procesar el request por eso opt&#xE9; por una metodolog&#xED;a diferente. Adem&#xE1;s los resultados <strong>dependen mucho del pa&#xED;s</strong> o regi&#xF3;n donde se realice.</p>
<p>Normalmente bastar&#xED;a con utilizar el comando <code>dig</code> de *nix para obtener el tiempo que tarda un request pero para obtener un mejor resultado es necesario hacer varios request adem&#xE1;s para esto necesitamos un poco m&#xE1;s de precisi&#xF3;n.</p>
<h3 id="metodolog%C3%ADa">Metodolog&#xED;a</h3>
<ol>
<li>Elegir <strong>targets distintos</strong> para mayor variedad(Sitio nacional, sitio de alto tr&#xE1;fico y un sitio no muy solicitado).</li>
<li>Hacer <strong>varias peticiones</strong> DNS a los distintos servidores usando <code>bash</code>/<code>zsh</code> y <code>dig</code>.</li>
<li>Capturar los paquetes de red con <a href="https://www.wireshark.org/?ref=blog.melizeche.com">Wireshark</a>.</li>
<li>Medir la diferencia de tiempo entre el request y la respuesta.</li>
<li>Sacar el promedio.</li>
</ol>
<h4 id="targets">Targets:</h4>
<ul>
<li><a href="http://www.abc.com.py/?ref=blog.melizeche.com">www.abc.com.py</a></li>
<li><a href="http://instagram.com/?ref=blog.melizeche.com">instagram.com</a></li>
<li><a href="http://melizeche.com/?ref=blog.melizeche.com">melizeche.com</a></li>
</ul>
<h4 id="script">Script:</h4>
<p>El script solicita la resoluci&#xF3;n de cada dominio de forma intercalada unas 5 veces y por cada servidor DNS haciendo una pausa de 200ms entre cada request (el script e extremadamente mejorable  pero es lo que sali&#xF3; en el momento <code>&#xAF;\_(&#x30C4;)_/&#xAF;</code>)</p>
<pre><code>for dns in &quot;8.8.8.8&quot; &quot;9.9.9.9&quot; &quot;186.16.16.16&quot; &quot;1.1.1.1&quot; &quot;208.67.222.222&quot;; do
    for x in 1 2 3 4 5; do
        for url in &quot;instagram.com&quot; &quot;www.abc.com.py&quot; &quot;melizeche.com&quot;; do
            dig $url @$dns &amp;&amp; sleep 0.2; 
        done; 
    done; 
done;
</code></pre>
<h4 id="captura">Captura</h4>
<p>El uso de Wireshark ya escapa del alcance de este post pero b&#xE1;sicamente se pueden usar los filtros <code>dns</code>, <code>ip.src</code>, <code>ip.dst</code> para ver los resultados que nos interesan.<br>
<img src="https://blog.melizeche.com/content/images/2018/04/wire3.png" alt="&#xBF;Qu&#xE9; tan r&#xE1;pido es el DNS que usas? Comparativa de rendimiento de DNS" loading="lazy"></p>
<h4 id="delta">Delta</h4>
<p>En Wireshark podemos marcar un evento o paquete como referencia temporal lo que nos permite f&#xE1;cilmente obtener la diferencia entre el request y la respuesta<br>
<img src="https://blog.melizeche.com/content/images/2018/04/wire4.png" alt="&#xBF;Qu&#xE9; tan r&#xE1;pido es el DNS que usas? Comparativa de rendimiento de DNS" loading="lazy"></p>
<h4 id="exportar-y-promedio">Exportar y promedio</h4>
<p><img src="https://blog.melizeche.com/content/images/2018/04/gdocs.png" alt="&#xBF;Qu&#xE9; tan r&#xE1;pido es el DNS que usas? Comparativa de rendimiento de DNS" loading="lazy"><br>
Wireshark permite exportar a CSV y con eso se facilita el procesamiento de los datos, utilic&#xE9; Google Spreadsheets para que sea m&#xE1;s f&#xE1;cil de compartir. En el siguiente link se pueden encontrar <strong>todos los datos en crudo y los c&#xE1;lculos utilizados</strong>.</p>
<p><a href="https://docs.google.com/spreadsheets/d/1mTjzMYYrNMHqerx5C0byQ7Q7g1mpWeOY-dgVdEZix-4/edit?usp=sharing&amp;ref=blog.melizeche.com">DNS Test - Hoja de c&#xE1;lculo</a></p>
<h2 id="resultados">Resultados</h2>
<p>No sorprende que el servidor de menor tiempo de respuesta sea el de Tigo dado que es el proveedor local y el request no sale de la red interna, igual m&#xE1;s arriba ya citamos los posibles <strong>inconvenientes</strong> de usar un DNS local.</p>
<p>Algo interesante es el caso de Cloudflare: Hasta en su propio sitio dicen que es 28% m&#xE1;s r&#xE1;pido, pero al menos desde Paraguay la cosa es distinta, <strong>comparando con Google el servicio de Cloudflare es 5.3X m&#xE1;s r&#xE1;pido</strong>.</p>
<p><a href="https://blog.melizeche.com/content/images/2018/04/BenchmarkDNS.png"><img src="https://blog.melizeche.com/content/images/2018/04/BenchmarkDNS.png" alt="&#xBF;Qu&#xE9; tan r&#xE1;pido es el DNS que usas? Comparativa de rendimiento de DNS" loading="lazy"></a></p>
<h2 id="conclusi%C3%B3n">Conclusi&#xF3;n</h2>]]></content:encoded></item><item><title><![CDATA[NSA Hacking Tools: Estudio de la explotación de DOUBLEPULSAR y ETERNALBLUE en Paraguay]]></title><description><![CDATA[En el grupo de hackers conocido como The Shadow Brokers publicó su último leak del "arsenal" del Equation Group de la NSA con varios de exploits tipo RCE...]]></description><link>https://blog.melizeche.com/nsa-hacking-tools-estudio-de-doublepulsar-en-paraguay/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1c5e</guid><category><![CDATA[seguridad]]></category><category><![CDATA[infosec]]></category><category><![CDATA[windows]]></category><category><![CDATA[estudio]]></category><category><![CDATA[estadisticas]]></category><category><![CDATA[NSA]]></category><category><![CDATA[Shadow Brokers]]></category><category><![CDATA[exploits]]></category><category><![CDATA[paraguay]]></category><category><![CDATA[MS17-010]]></category><category><![CDATA[doublepulsar]]></category><category><![CDATA[ethernalblue]]></category><category><![CDATA[eternalblue]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Tue, 25 Apr 2017 10:49:00 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2017/04/pulsar_joy4-1.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="introduccin">Introducci&#xF3;n</h2>
<h3 id="contexto">Contexto</h3>
<img src="https://blog.melizeche.com/content/images/2017/04/pulsar_joy4-1.jpg" alt="NSA Hacking Tools: Estudio de la explotaci&#xF3;n de DOUBLEPULSAR y ETERNALBLUE en Paraguay"><p>El 14 de abril de 2017 el grupo de hackers conocido como <strong><a href="https://en.wikipedia.org/wiki/The_Shadow_Brokers?ref=blog.melizeche.com">The Shadow Brokers</a></strong> public&#xF3; su &#xFA;ltimo leak del <em>&quot;arsenal&quot;</em> del <strong><a href="https://en.wikipedia.org/wiki/Equation_Group?ref=blog.melizeche.com">Equation Group</a></strong> de la <strong>NSA</strong><sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> (Es una historia larga, <a href="https://www.riskbasedsecurity.com/2016/08/the-shadow-brokers-lifting-the-shadows-of-the-nsas-equation-group?ref=blog.melizeche.com">aqu&#xED; hay una cronolog&#xED;a</a>). Lo llamativo de este leak fue la gran cantidad de <a href="https://es.wikipedia.org/wiki/Exploit?ref=blog.melizeche.com">exploits</a> para casi todas las versiones de Windows del tipo <a href="https://www.ophtek.com/remote-code-execution-used/?ref=blog.melizeche.com">Remote Code Execution</a> que se aprovechan de vulnerabilidades catalogadas como <em><a href="https://es.wikipedia.org/wiki/Ataque_de_d%C3%ADa_cero?ref=blog.melizeche.com">Zero-Day</a></em>, es decir que no eran de conocimiento p&#xFA;blico ni del fabricante.<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1:1]</a></sup></p>
<p>Aparte de los exploits tambi&#xE9;n se filtraron <em>herramientas</em> para poder utilizarlos como <strong>FUZZBUNCH</strong> (que ser&#xED;a el equivalente de <a href="https://es.wikipedia.org/wiki/Metasploit?ref=blog.melizeche.com">Metasploit</a> de la NSA) lo que facilita a que mucha gente pueda realizar este tipo de ataques sofisticados sin mayores dificultades<sup class="footnote-ref"><a href="#fn1" id="fnref1:2">[1:2]</a></sup> y es ac&#xE1; donde se complica realmente, porque para la mayor&#xED;a de las personas la NSA no figura en su posible <a href="https://ssd.eff.org/es/module/una-introduccion-al-modelaje-de-amenazas?ref=blog.melizeche.com">modelo de amenazas</a> pero al <em>democratizarse</em> sus herramientas es como que le hayan dado una mano a otros actores que s&#xED; puedan tener motivos.</p>
<p>Otro punto muy importante es que aunque muchas de las vulnerabilidades ya hayan sido solucionadas otras no lo fueron porque ya son de versiones de Windows sin soporte(XP, Server 2003, Vista) y hay que sumar la falta de costumbre del usuario y/o administrador de sistemas de mantener actualizado el software.</p>
<h3 id="ethernalblueydoublepulsar">Ethernalblue y Doublepulsar</h3>
<p>En el siguiente cuadro podemos observar exploits del leak con los sistemas operativos vulnerables a estos:<br>
<a href="https://blog.melizeche.com/content/images/2017/04/xchart.jpg"><img src="https://blog.melizeche.com/content/images/2017/04/xchart.jpg" alt="NSA Hacking Tools: Estudio de la explotaci&#xF3;n de DOUBLEPULSAR y ETERNALBLUE en Paraguay" loading="lazy"></a></p>
<p>Claramente saltan a la vista <strong>ETHERNALBLUE</strong> y <strong>ETHERNALROMANCE</strong> como los m&#xE1;s <em>exitosos</em>, pero solo el primero permite explotar las vulnerabilidades en las versiones m&#xE1;s actuales sin requerir ningun tipo de autenticaci&#xF3;n.</p>
<p><strong>ETHERNALBLUE</strong> explota una vulnerabilidad en el protocolo SMB utilizado para compartir archivos y dispositivos en red lo que habilita a instalar un implante/backdoor.</p>
<p><strong>DOUBLEPULSAR</strong><sup class="footnote-ref"><a href="#fn1" id="fnref1:3">[1:3]</a></sup> es el backdoor que permite inyectar y ejecutar cualquier DLL(Dynamic Link Library) en un proceso, comprometiendo la computadora para cualquier prop&#xF3;sito que desee el atacante.</p>
<p>Para ponerlo en t&#xE9;rminos sencillos digamos que; ETHERNALBLUE es quien abre el camino, y DOUBLEPULSAR es el que lo mantiene abierto.</p>
<p>Con estos puntos aclarados podemos pasar a la parte interesante:</p>
<h2 id="estudiodelasituacinactualenparaguay">Estudio de la situaci&#xF3;n actual en Paraguay</h2>
<p>Es imposible saber exactamente cuantos sistemas fueron explotados en todo el pa&#xED;s dado que no todas los computadoras est&#xE1;n expuestas a Internet directamente (por suerte) pero si podemos analizar los sistemas que si lo est&#xE1;n, y es exactamente lo que hice.<br>
Para esto primero es necesario escanear todo el rango direcciones de IP p&#xFA;blicas asignadas a Paraguay, para ver que cuales est&#xE1;n <em>escuchando</em> conexiones del protocolo SMB, el siguiente paso es utilizar un script para detectar si es que esas direcciones ya fueron explotadas con DOUBLEPULSAR.</p>
<p><strong>ACLARACI&#xD3;N:</strong> <em>En esta investigaci&#xF3;n no se accedi&#xF3; a ning&#xFA;n sistema, se notific&#xF3; a los responsables de los mismos y se est&#xE1; trabajando con algunos ellos para ayudar a solucionar.</em></p>
<h3 id="metodologaaplicada">Metodolog&#xED;a aplicada</h3>
<h4 id="rangodeips">Rango de IPs</h4>
<p>Los rangos de direcciones IP son p&#xFA;blicos y <a href="http://www.lacnic.net/?ref=blog.melizeche.com">LACNIC</a> como organizaci&#xF3;n encargada de asignarlos provee los rangos en el siguiente link <a href="ftp://ftp.lacnic.net/pub/stats/lacnic/">FTP</a>.</p>
<h4 id="escaneodepuertos">Escaneo de puertos</h4>
<p>Por motivos de acompa&#xF1;amiento a los afectados esta secci&#xF3;n no ser&#xE1; detallada ahora y se actualizar&#xE1; mas adelante con la metodolog&#xED;a utilizada.</p>
<h4 id="deteccindeservidoresvulnerados">Detecci&#xF3;n de servidores vulnerados</h4>
<p>La empresa Countercept desarroll&#xF3; un script en Python que detecta si un servidor ha sido explotado por <strong>DOUBLEPULSAR</strong>, se puede descargar desde este repositorio:<br>
<a href="https://github.com/countercept/doublepulsar-detection-script?ref=blog.melizeche.com">https://github.com/countercept/doublepulsar-detection-script<br>
</a></p>
<p>La documentaci&#xF3;n se encuentra en el repositorio pero el comando utilizado para este estudio es:</p>
<p><code>python detect_doublepulsar_smb.py --file &lt;ip_list.txt&gt; --threads 2</code></p>
<p>Obs: Por defecto el script selecciona <code>--threads 10</code>, es recomendado reducir la cantidad de hilos para no saturar ninguna red.</p>
<h2 id="resultados">Resultados</h2>
<p>Teniendo en cuenta los rangos de IP que Paraguay tiene asignado:</p>
<ul>
<li>
<p><strong>1.083.648</strong> direcciones IP escaneadas en busca de servidores que escuchen conexiones en el puerto del protocolo SMB.</p>
</li>
<li>
<p><strong>458</strong> hosts escuchando en el puerto del protocolo SMB.<br>
<img src="https://blog.melizeche.com/content/images/2017/04/doublepulsar_censor2.jpg" alt="NSA Hacking Tools: Estudio de la explotaci&#xF3;n de DOUBLEPULSAR y ETERNALBLUE en Paraguay" loading="lazy"></p>
</li>
<li>
<p><mark><strong>26</strong> hosts que fueron vulnerados con DOUBLEPULSAR</mark></p>
</li>
<li>
<p><strong>194</strong> hosts en los cuales no se detecto una que haya sido vulnerado</p>
</li>
<li>
<p><strong>237</strong> hosts no se pudieron comprobar debido a errores de red(Connection reset by peer, Connection timed out)</p>
</li>
</ul>
<h3 id="observaciones">Observaciones</h3>
<ul>
<li>Es muy probable que existan mas hosts escuchando conexiones en el puerto SMB pero que no se hayan detectado debido al tipo de escaneo de puertos pasivo a fin de no saturar, por lo tanto el n&#xFA;mero real de infecciones podr&#xED;a ser mayor.</li>
<li>Los 194 hosts donde no se detectaron que hayan sido vulnerados no significa que por esto est&#xE1;n seguros, si no se instalan las actualizaciones de seguridad o no se mitiga de alguna manera pueden ser victimas de ETHERNALBLUE u otro exploit.</li>
</ul>
<h2 id="conclusin">Conclusi&#xF3;n</h2>
<p>Es imposible saber si las infecciones de DOUBLEPULSAR son recientes o si fueron explotadas por el Equation Group(al menos <strong>desde el 2011</strong> ten&#xED;an estos exploits), en este caso lo m&#xE1;s probable es que sean infecciones recientes ya que la dificultad de infectarlas no es muy elevada debido a que son computadoras con Windows que est&#xE1;n compartiendo recursos en Internet, cosa que en la mayor&#xED;a de los casos es una <strong>mala practica</strong>, existiendo soluciones como usar una <strong>VPN</strong> para acceder a estos recursos.</p>
<p><strong>26 hosts</strong> explotados por un malware de la NSA quiz&#xE1;s suene a poco pero si consideramos que esa cifra es el <strong>5.7%</strong> de las direcciones escaneadas nos puede dar un <em>pantallazo</em> de la situaci&#xF3;n actual, adem&#xE1;s el leak es reciente, lo que hace probable que vayan aumentando los casos con el pasar del tiempo.</p>
<p>Aunque Microsoft haya solucionado las principales vulnerabilidades(<a href="https://technet.microsoft.com/en-us/library/security/ms17-010.aspx?ref=blog.melizeche.com">MS17-010</a>) para sus SO con soporte hay otros que <strong>nunca van a recibir el parche de seguridad</strong>, adem&#xE1;s como se mencion&#xF3; anteriormente muchas veces hay una falta de politica de actualizaciones de seguridad o simplemente irresponsabilidad de parte de los administradores de sistemas.</p>
<p>La amenaza principal probablemente no est&#xE1; en los sistemas vulnerables expuestos a Internet sino en las miles de redes internas que est&#xE1;n a un <em>&quot;Wifi sin contrase&#xF1;a&quot;</em>, un <em>empleado desleal</em> o a una mala configuraci&#xF3;n de ser vulneradas.</p>
<p>La seguridad de la informaci&#xF3;n no es algo que se pueda comprar directamente, no existen las <em>balas de plata</em>, solo a trav&#xE9;s del <strong>asesoramiento adecuado, la implementaci&#xF3;n de buenas practicas y educaci&#xF3;n al usuario</strong> se puede lograr una mejor seguridad.</p>
<h5 id="notas">Notas</h5>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>An&#xE1;lisis detallado del m&#xE9;todo de infecci&#xF3;n de DOUBLEPULSAR <a href="http://www.securitynewspaper.com/2017/04/22/doublepulsar-initial-smb-backdoor-ring-0-shellcode-analysis/?ref=blog.melizeche.com">http://www.securitynewspaper.com/2017/04/22/doublepulsar-initial-smb-backdoor-ring-0-shellcode-analysis/</a> <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a> <a href="#fnref1:1" class="footnote-backref">&#x21A9;&#xFE0E;</a> <a href="#fnref1:2" class="footnote-backref">&#x21A9;&#xFE0E;</a> <a href="#fnref1:3" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[ComentaBOT: Creando el comentarista perfecto con cadenas de Márkov]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><s>tl;dr creando un bot de twitter que sea el pelotudo promedio</s></p>
<p>Cuando uno entra a la secci&#xF3;n de comentarios del sitio de un diario normalmente se termina riendo de lo absurdo de estos y/o perdiendo toda la fe en la humanidad, o al menos, lastimosamente eso</p>]]></description><link>https://blog.melizeche.com/creando-el-comentarista-perfecto-con-cadenas-de-markov/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1ca6</guid><category><![CDATA[ABC]]></category><category><![CDATA[twitter]]></category><category><![CDATA[markov]]></category><category><![CDATA[comentarista]]></category><category><![CDATA[digital]]></category><category><![CDATA[bot]]></category><category><![CDATA[robot]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Wed, 03 Feb 2016 18:19:00 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2016/02/keyboard-overhead3.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.melizeche.com/content/images/2016/02/keyboard-overhead3.jpg" alt="ComentaBOT: Creando el comentarista perfecto con cadenas de M&#xE1;rkov"><p><s>tl;dr creando un bot de twitter que sea el pelotudo promedio</s></p>
<p>Cuando uno entra a la secci&#xF3;n de comentarios del sitio de un diario normalmente se termina riendo de lo absurdo de estos y/o perdiendo toda la fe en la humanidad, o al menos, lastimosamente eso es lo que me sucede a mi. No es que espere iluminarme pero a veces uno busca alg&#xFA;n aporte o punto de vista diferente pero en la mayor&#xED;a de los casos, y aunque el art&#xED;culo trate sobre el virus del Zika o cualquier otro tema lo que sucede es algo similar a esto:</p>
<div>
<img src="https://blog.melizeche.com/content/images/2016/02/ufostr2.png" alt="ComentaBOT: Creando el comentarista perfecto con cadenas de M&#xE1;rkov">
<center>[<i>UFOstronismo</i> y dem&#xE1;s <b>sinsentidos</b>]</center>
</div>
<p>Entonces ya sabiendo que no voy a poder entender el razonamiento de los comentaristas decid&#xED; <em>&quot;masoquistamente&quot;</em> tratar reproducirlo con la ayuda de 53.373 comentarios de noticias de ABC y cadenas de M&#xE1;rkov.</p>
<h3 id="cuantoscomentariosycadenasdequ"><em>&#xA1;Cuantos comentarios y cadenas de qu&#xE9;?</em></h3>
<h4 id="sdemrkovp">S&#xED;, de M&#xE1;rkov :P</h4>
<p>Bueno, vamos por partes. Sin dar vueltas veamos la definici&#xF3;n de <a href="https://es.wikipedia.org/wiki/Cadena_de_M%C3%A1rkov?ref=blog.melizeche.com">Wikipedia</a>:</p>
<blockquote>
<p>En la teor&#xED;a de la probabilidad, se conoce como cadena de M&#xE1;rkov  a un tipo especial de proceso estoc&#xE1;stico discreto en el que la probabilidad de que ocurra un evento depende solamente del evento inmediatamente anterior. Esta caracter&#xED;stica de falta de memoria recibe el nombre de propiedad de Markov.<br>
Recibe su nombre del matem&#xE1;tico ruso Andr&#xE9;i M&#xE1;rkov (1856-1922).</p>
</blockquote>
<p>Haciendo una burda s&#xED;ntesis podr&#xED;amos decir que <em>dado un estado actual se puede calcular la probabilidad del estado siguiente</em>. Esto tiene muchas <a href="https://es.wikipedia.org/wiki/Cadena_de_M%C3%A1rkov?ref=blog.melizeche.com#Aplicaciones">aplicaciones</a> desde <strong>Meteorolog&#xED;a a Inteligencia Artificial</strong>; por ejemplo, el algoritmo PageRank de Google utiliza cadenas de M&#xE1;rkov.</p>
<h4 id="yqutienequeverestoconuncomentaristaoaquevieneestepost"><em>&#xBF;Y qu&#xE9; tiene que ver esto con un comentarista o a que viene este post?</em></h4>
<h5 id="okvozenoffencursivayaestamosllegandoaeso">Ok voz en off en cursiva, ya estamos llegando a eso.</h5>
<p>El lenguaje no es algo que se pueda reproducir f&#xE1;cilmente en un modelo matem&#xE1;tico(<s>al menos no con este enfoque</s>)  sobre todo porque tiene muchas reglas gram&#xE1;tica y sem&#xE1;ntica por lo que ser&#xED;a muy dif&#xED;cil sacar un resultado que sea coherente, pero...<br>
<strong>&#xA1;Esa es la buena noticia!</strong><br>
Si queremos imitar a un comentarista promedio las <strong>reglas gramaticales, sem&#xE1;nticas y especialmente coherencia no son cosas que necesitemos! :D</strong><br>
Lo &#xFA;nico que se necesita es <strong>&quot;alimentar&quot;</strong> al algoritmo con datos reales, es decir con comentarios de medios digitales y eleg&#xED; <a href="http://www.abc.com.py/?ref=blog.melizeche.com">ABC</a> por ser el sitio de noticias nacionales con mas visitas (asumo que m&#xE1;s comentarios tambi&#xE9;n) seg&#xFA;n el <a href="http://www.alexa.com/topsites/countries/PY?ref=blog.melizeche.com">ranking de Alexa</a>.<br>
Con esto podemos ir eligiendo una palabra o frase y se pueden completar las siguientes de acuerdo a la probabilidades seg&#xFA;n nuestros datos (el conjunto de comentarios).</p>
<h3 id="scrapingdedatos">Scraping de datos</h3>
<p>Luego de una corta investigaci&#xF3;n vi que el scraping como tal por suerte no era necesario; la recolecci&#xF3;n, miner&#xED;a o como lo quieran llamar se puede obtener llamando al API de Facebook, es decir sin ni siquiera &quot;gastar&quot; el ancho de banda de ABC, solo pasando la URL deseada como par&#xE1;metro, por ejemplo:<br>
<code>https://graph.facebook.com/comments?id=http://abc.com.py/1447680.html&amp;limit=500&amp;fields=message</code><br>
El hecho que la url corta sea pr&#xE1;cticamente num&#xE9;rica facilit&#xF3; much&#xED;simo el trabajo. Con esta informaci&#xF3;n crear un script <a href="https://github.com/melizeche/comentaBOT/blob/master/scraper.py?ref=blog.melizeche.com">(ver c&#xF3;digo)</a> que descargue los comentarios y los guarde en una base de datos no fue muy dif&#xED;cil, la parte complicada fue no pasarse de los limites del API de Facebook para consultar aproximadamente <strong>3 meses de noticias.</strong></p>
<h4 id="resultado53373comentarios">Resultado: 53.373 comentarios</h4>
<p>M&#xE1;s que suficientes para lo que necesitamos.</p>
<h4 id="uffmuchasvueltasymuchostecnicismosdondeestelbot"><em>&#xA1;Uff muchas vueltas y muchos tecnicismos donde est&#xE1; el bot?</em></h4>
<h5 id="vozenoffencursivacuandotensrazntensrazn">Voz en off en cursiva cuando ten&#xE9;s raz&#xF3;n, ten&#xE9;s raz&#xF3;n.</h5>
<p>A qui&#xE9;n le interese la parte t&#xE9;cnica, <strong>el c&#xF3;digo est&#xE1; en un repositorio de <a href="https://github.com/melizeche/comentaBOT/?ref=blog.melizeche.com">GitHub</a></strong> con unas breves instrucciones de uso; preguntas, sugerencias y/o modificaciones son totalmente bienvenidas.</p>
<p>Sin m&#xE1;s preambulos les presento a</p>
<h3 id="comentaristaabc"><a href="https://twitter.com/comentaristaABC?ref=blog.melizeche.com">@ComentaristaABC</a></h3>
<p>El bot est&#xE1; programado para tuitear <strong>cada dos horas</strong> y tuit&#xE9;a este tipo de cosas incoherentes:</p>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr">RECORDEMOS QUE SE PUDRAN EN LA CONVOCATORIA A LA MAYOR PREOCUPACI&#xD3;N RADICA EN QUE LOS MIEMBROS DEL MERCOSUR(NO SIRVE PARA NADA ANDATE BASURA</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694431071870566401?ref=blog.melizeche.com">febrero 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr">SE PUBLICAN COMENTARIOS CATASTR&#xD3;FICOS REFERIDOS AL ESPOSO DE UNA EDUCACI&#xD3;N MACHISTA QUE LESIONA LA DIGNIDAD DE LAS BINACIONALES</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694787809434058752?ref=blog.melizeche.com">febrero 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Pero a veces hasta tiene m&#xE1;s sentido que los comentaristas reales</p>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr">Y QU&#xC9; MIERDA EL MUNDO SER&#xC1; COSMOPOLITA COMO DEJARON LA AVENIDA SACRAMENTO QUE HOY DICE SER UNA ZONA CON INUNDACIONES REPENTINAS</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694595576361390080?ref=blog.melizeche.com">febrero 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr">ADEM&#xC1;S LA ANDE ES UN CAOS,CUANDO APARECE LA &quot;EMPRESA Y&quot;&quot;POR SU PARTE, HASTA EL CANSANCIO IBAN A ACOMODAR POR EL HECHO ADEMAS DE SUS LEYES, C</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694454056996225025?ref=blog.melizeche.com">febrero 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
Y algunas son directamente WTF &#x1F602;
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr">ROBO FUE EN UN PA&#xCD;S DONDE NO TENGAN NI UN SOLO HUEVO, HITLER CASI DOMINO EL MUNDO, SOLO QUE DEBER&#xCD;A HACER ABC, SI NO EXISTO, &#xBF;COMO VOY A OTR</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694442820359315456?ref=blog.melizeche.com">febrero 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr">HOLA KAPE DECI NA QUE ESA CASA DONDE VIVIA COMO ESCLAVA SEXUAL A LOS CLUBES QUE PASO, UNA PAREJA TAN JOVEN, FUERZA A MI HOGAR,, JAJAJAJAAJAJ</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694440305618227201?ref=blog.melizeche.com">febrero 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Tambi&#xE9;n puede responder tuits basandose en las primeras 3 palabras que le escribas por ejemplo:</p>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr"><a href="https://twitter.com/ComentaristaABC?ref=blog.melizeche.com">@ComentaristaABC</a> Lino Oviedo</p>&#x2014; Marce Elizeche Land&#xF3; (@melizeche) <a href="https://twitter.com/melizeche/status/694743996338429953?ref=blog.melizeche.com">febrero 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
La respuesta&#x1F602;&#x1F633;:
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr"><a href="https://twitter.com/melizeche?ref=blog.melizeche.com">@melizeche</a> LINO OVIEDO QUIENES ROBARON LAS ELECCIONES DEL COMITE CENTRAL DE LA POLIC&#xCD;A NACIONAL Y TUS RUTAS Y LUEGO IRA DETENIDO A LA MANO</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694743997936463873?ref=blog.melizeche.com">febrero 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Pero si tengo que elegir uno solo como la prueba de que <strong>el bot realmente es un comentarista de ABC</strong> me quedo con este tuit:</p>
<blockquote class="twitter-tweet" data-lang="es"><p lang="es" dir="ltr"><a href="https://twitter.com/melizeche?ref=blog.melizeche.com">@melizeche</a> ZURDOS ASQUEROSOS, HAY QUE SEGUIR SOLVENTANDO PARA SUS DESAYUNOS Y EL COLEGIO AMERICANO A ENSUCIAR EL NOMBRE DE MORIA</p>&#x2014; Comentarista de ABC (@ComentaristaABC) <a href="https://twitter.com/ComentaristaABC/status/694599119617175552?ref=blog.melizeche.com">febrero 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<h4 id="simplementesublime">Simplemente sublime.</h4>
<p>Para m&#xE1;s adelante <strong>hay muchas cosas que se pueden mejorar</strong>, desde usar otro algoritmo a cortar mejor las palabras pero vamos a ver que tal funciona. Tambi&#xE9;n en estos d&#xED;as voy a liberar el dataset de los 53.373 comentarios por si alguien necesita una <strong>base de datos de incoherencias</strong>.</p>
<p>Ahora solo resta escribirle para ver que nos cuenta nuestro nuevo amigo amante de las may&#xFA;sculas ;)</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Abuso de permisos: Caso Tigo Shop ¿Spyware de la telefónica?]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Hace un buen tiempo que estaba queriendo retomar el blog con art&#xED;culos referentes a seguridad de la informaci&#xF3;n, sobre todo con algunos sucesos de suplantaci&#xF3;n de identidad ocurridos la semana pasada (Mal llamado &quot;hackeos&quot; por la prensa) pero ese tema prefiero dejarlo</p>]]></description><link>https://blog.melizeche.com/abuso-de-permisos-caso-tigo-shop-spyware/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1ca5</guid><category><![CDATA[Android]]></category><category><![CDATA[Apps]]></category><category><![CDATA[malware]]></category><category><![CDATA[Tigo]]></category><category><![CDATA[Tigo Shop]]></category><category><![CDATA[seguridad]]></category><category><![CDATA[spyware]]></category><category><![CDATA[infosec]]></category><category><![CDATA[privacidad]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Wed, 29 Jul 2015 12:12:45 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2015/07/beaver-skull-macro-malware-1.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.melizeche.com/content/images/2015/07/beaver-skull-macro-malware-1.jpg" alt="Abuso de permisos: Caso Tigo Shop &#xBF;Spyware de la telef&#xF3;nica?"><p>Hace un buen tiempo que estaba queriendo retomar el blog con art&#xED;culos referentes a seguridad de la informaci&#xF3;n, sobre todo con algunos sucesos de suplantaci&#xF3;n de identidad ocurridos la semana pasada (Mal llamado &quot;hackeos&quot; por la prensa) pero ese tema prefiero dejarlo para otro post debido a algo que surgi&#xF3; el d&#xED;a de ayer.</p>
<p>Hace varios meses la telef&#xF3;nica <a href="http://www.tigo.com.py/?ref=blog.melizeche.com">Tigo</a> lanz&#xF3; una app de consulta y carga de saldo (Paquetes de sms, datos, etc...) llamada <a href="https://play.google.com/store/apps/details?id=com.juvomobileinc.tigoshop.py&amp;ref=blog.melizeche.com">Tigo Shop</a> la cual aparte ofrece beneficios por instalarla. Como muchos usuarios tampoco me fij&#xE9; en los permisos que requer&#xED;a la app (Craso error), ya sea por desatento o por la confianza que uno suele tener <s>ten&#xED;a</s> a una empresa conocida, y la instal&#xE9;.</p>
<p>Recientemente no se si por curiosidad o por costumbre revis&#xE9; los <strong>permisos</strong> que pide <strong>Tigo Shop</strong> y encontr&#xE9; que pide mucho m&#xE1;s de lo que realmente necesita para funcionar correctamente (Obs: Us&#xE9; la app varios meses antes de percatarme de esto).</p>
<p>B&#xE1;sicamente la app puede acceder a tu <strong>ubicaci&#xF3;n geogr&#xE1;fica</strong>, ver tus <strong>contactos</strong>, enviar y <strong>leer SMS</strong>, modificar/<strong>ver tus fotos y archivos</strong>, ver <strong>cuentas asociadas</strong> a tu tel&#xE9;fono (Facebook, Twitter, Google, etc), ver que aplicaciones se est&#xE1;n ejecutando entre otras cosas m&#xE1;s que son totalmente innecesarias para una app que sirve de consulta y compra de saldo, y que no tiene funcionalidades relacionadas a ubicaci&#xF3;n GPS, directorio de contactos ni a fotos y archivos (Lo &#xFA;nico que realmente necesitar&#xED;a es conectarse a internet para interactuar con la telef&#xF3;nica).<br>
Este tipo de pr&#xE1;ctica es propia de los <a href="https://es.wikipedia.org/wiki/Malware?ref=blog.melizeche.com">malwares</a>.</p>
<p>A continuaci&#xF3;n podemos ver la captura de pantalla de la tienda Google Play donde muestra los permisos que solicita esta app, marqu&#xE9; en rojo los que considero que est&#xE1;n dem&#xE1;s y presentan un abuso a la privacidad de los usuarios (M&#xE1;s abajo desgloso uno a uno).</p>
<p><img src="https://blog.melizeche.com/content/images/2015/07/Tigo-Shop-anotado.png" alt="Abuso de permisos: Caso Tigo Shop &#xBF;Spyware de la telef&#xF3;nica?" loading="lazy"></p>
<p><em>Si est&#xE1;s un poco mareado al respecto a los permisos en Android b&#xE1;sicamente son una protecci&#xF3;n para que apps malintencionadas no accedan a tus recursos/informaci&#xF3;n, algunos son necesarios de acuerdo a la naturaleza de la app. Citando<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>:</em></p>
<blockquote>
<p>Android define un esquema de permisos para proteger ciertos recursos y caracter&#xED;sticas especiales. Toda aplicaci&#xF3;n que acceda a estos recursos est&#xE1; obligada a declarar su intenci&#xF3;n de usarlos. En caso de que una aplicaci&#xF3;n intente acceder a un recurso del que no ha solicitado permiso, se generar&#xE1; una excepci&#xF3;n de permiso y la aplicaci&#xF3;n ser&#xE1; interrumpida inmediatamente.</p>
</blockquote>
<p><em>Si quer&#xE9;s saber m&#xE1;s sobre los permisos de Android podes leer &quot;<a href="http://www.xatakandroid.com/seguridad/como-funcionan-los-permisos-y-seguridad-de-los-datos-en-android?ref=blog.melizeche.com">&#xBF;C&#xF3;mo funcionan los permisos y seguridad de los datos en Android?</a>&quot;</em></p>
<h3 id="conversandodenunciandocontigo">Conversando/denunciando con Tigo</h3>
<p>Volviendo al caso de Tigo Shop una vez que vi esto decid&#xED; hacer p&#xFA;blico y preguntar a Tigo (en una serie de tweets) el porqu&#xE9; de estos permisos que nada tienen que ver con las funcionalidades de la app, aqu&#xED; dejo el primer tweet:</p>
<blockquote class="twitter-tweet" lang="en"><p lang="es" dir="ltr">La app de Tigo Shop puede acceder atu geolocalizacion, a tus contactos, a tus fotos y a las aplicaciones instaladas&#x1F6AB; <a href="http://t.co/7g2eIQMGVZ?ref=blog.melizeche.com">pic.twitter.com/7g2eIQMGVZ</a></p>&#x2014; Marce Elizeche Land&#xF3; (@melizeche) <a href="https://twitter.com/melizeche/status/625525752482693120?ref=blog.melizeche.com">July 27, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p><em>Ingres&#xE1; aca para ver el resto de la <a href="https://storify.com/melizeche/tigo-shop?ref=blog.melizeche.com">Conversaci&#xF3;n/Timeline con @TigoParaguay</a> de una forma ordenada.</em></p>
<p>Como se ve en el <a href="https://storify.com/melizeche/tigo-shop?ref=blog.melizeche.com">Storify</a> primero Tigo se confunde de app y dice que la ubicaci&#xF3;n GPS es necesaria para los <a href="https://twitter.com/TigoParaguay/status/625530204501471232?ref=blog.melizeche.com">usuarios de distintas operadoras</a> (?), luego que los permisos de ubicaci&#xF3;n y de llamadas son para registrar inconvenientes en la app y en la red celular (<a href="https://twitter.com/TigoParaguay/status/625691806580277248?ref=blog.melizeche.com">1</a>, <a href="https://twitter.com/TigoParaguay/status/625691840285671424?ref=blog.melizeche.com">2</a>) y referente a que la app tenga permisos de leer todos tus contactos guardados Tigo dice que es para poder &quot;enviar como recomendaci&#xF3;n a tus contactos&quot; (<a href="https://twitter.com/TigoParaguay/status/625691855569690624?ref=blog.melizeche.com">3</a>) siendo que la app <a href="https://twitter.com/melizeche/status/625696086934581248?ref=blog.melizeche.com">no tiene esa funci&#xF3;n</a> en ning&#xFA;n lugar visible. De la explicaci&#xF3;n el &#xFA;nico que considero v&#xE1;lido es el permiso de ID de dispositivo que Tigo justifica que es para iniciar sesi&#xF3;n autom&#xE1;ticamente (<a href="https://twitter.com/TigoParaguay/status/625691871516487680?ref=blog.melizeche.com">4</a>) cosa que es totalmente factible.</p>
<p>Luego Tigo <a href="https://twitter.com/TigoParaguay/status/625691888415305728?ref=blog.melizeche.com">admite que no necesita los permisos de SMS ni de acceso a Fotos y Archivos</a>, y podemos rescatar la  &quot;promesa&quot; de parte de ellos de solicitar que se eliminen estos dos permisos(SMS y archivos), un avance positivo pero no suficiente.<br>
<a href="https://twitter.com/melizeche/status/625692709035069441?ref=blog.melizeche.com">Reitero</a> que Ubicaci&#xF3;n, Identidad y Contactos son totalmente innecesarios y me responde que es para localizar la zona si hay intermitencias de se&#xF1;al(<a href="https://twitter.com/TigoParaguay/status/625694492121804800?ref=blog.melizeche.com">1</a>, <a href="https://twitter.com/TigoParaguay/status/625694506634096640?ref=blog.melizeche.com">2</a>)(?).</p>
<p>Para m&#xE1;s como manifestaron usuarios que compraron su tel&#xE9;fono de Tigo, <a href="https://twitter.com/FelipeGoroso/status/625702416193835009?ref=blog.melizeche.com">la app Tigo Shop no se puede desinstalar</a> (solo en los casos que el telefono haya venido con el firmware personalizado de Tigo, sino si se puede desinstalar)</p>
<blockquote class="twitter-tweet" lang="en"><p lang="es" dir="ltr">Configuraci&#xF3;n-&gt; aplicaciones-&gt; buscar Tigo Shop y desactivar es lo que nos queda <a href="https://twitter.com/TigoParaguay?ref=blog.melizeche.com">@TigoParaguay</a> <a href="https://twitter.com/melizeche?ref=blog.melizeche.com">@melizeche</a> <a href="http://t.co/A5pw31SNBp?ref=blog.melizeche.com">pic.twitter.com/A5pw31SNBp</a></p>&#x2014; Felipe Goroso S. (@FelipeGoroso) <a href="https://twitter.com/FelipeGoroso/status/625708978983538688?ref=blog.melizeche.com">July 27, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Es decir, Tigo Shop puede acceder a tus fotos, contactos, ubicaci&#xF3;n, aplicaciones que est&#xE1;s ejecutando, cuentas, SMS y adem&#xE1;s en algunos casos no se puede desinstalar?<br>
Hay una palabra para este tipo de software:<br>
&quot;<strong>MALWARE</strong>&quot; y si queremos ser espec&#xED;ficos entrar&#xED;a en la categor&#xED;a de Spyware.</p>
<p>Pero en el hipot&#xE9;tico caso que Tigo est&#xE9; recolectando esta informaci&#xF3;n &#xBF;Para que puede servirle a una telef&#xF3;nica tu ubicaci&#xF3;n, quienes son tus contactos, que cuentas de redes usas o que aplicaciones ten&#xE9;s instaladas?<br>
La respuesta: <a href="http://www.gestiopolis.com/utilizacion-bases-datos-marketing-moderno/?ref=blog.melizeche.com">Data Mining, para &quot;venderte mejor&quot;</a>.</p>
<h2 id="conclusin">Conclusi&#xF3;n</h2>
<p>Esta no es una aplicaci&#xF3;n de testeo de calidad de se&#xF1;al, no tiene sentido a que acceda a tu ubicaci&#xF3;n, <strong>no sabemos en que momento manda la ubicaci&#xF3;n</strong>, no sabemos para que pide permiso para <strong>acceder a tus fotos y archivos</strong>, no sabemos <strong>para que necesitan revisar tus contactos</strong> ni tampoco <strong>por que necesitan leer tus SMS</strong> o que cuentas de servicios tenemos asociadas en el tel&#xE9;fono.<br>
<strong>Tendr&#xED;amos que confiar ciegamente en Tigo</strong>, que ellos solo usan estos datos (ubicacion, cuentas conocidas,  contactos, fotos) para &quot;correcci&#xF3;n de errores&quot; del funcionamiento de la app y de la red y, si as&#xED; lo hiciera, como requisito m&#xED;nimo deber&#xED;a poner alg&#xFA;n <em>disclaimer</em> diciendo para que exactamente utilizan la informaci&#xF3;n recolectada (a escondidas del usuario actualmente). Si necesitan recolectar informaci&#xF3;n sensible lo m&#xED;nimo que se tienen que hacer es solicitar el consentimiento del usuario como lo hacen otros programas (<em><a href="https://blog.melizeche.com/content/images/2015/07/CK70BolWEAAcsRP.png">Ejemplo de Firefox</a></em>).</p>
<p>Las empresas tienen que empezar a tomar en serio la privacidad e intimidad de los usuarios, hay datos personales o sensibles que no se debe almacenar si no hay una justificaci&#xF3;n real, uno nunca sabe en manos de quien puede terminar esta informaci&#xF3;n.</p>
<p>Si Tigo no est&#xE1; recolectando toda esta informaci&#xF3;n deber&#xED;a eliminar todos estos permisos innecesarios de sus apps lo antes posible y aclarar que fue lo que sucedi&#xF3;, sino al menos pedir consentimiento y que el usuario sea quien decida si compartir o no estos datos con terceros.</p>
<p></p>
<h4 id="anexodesglosandolospermisosdetigoshop">Anexo: Desglosando los permisos de Tigo Shop</h4>
<ul>
<li>Dispositivo e historial de aplicaciones</li>
<li>recuperar aplicaciones en ejecuci&#xF3;n</li>
</ul>
<blockquote>
<p>Totalmente innecesario que Tigo sepa que aplicaciones est&#xE1;s ejecutando, es una violaci&#xF3;n a la privacidad.</p>
</blockquote>
<ul>
<li>Identidad</li>
<li>buscar cuentas en el dispositivo</li>
</ul>
<blockquote>
<p>Seg&#xFA;n Tigo es para identificar la cuenta de Google y mandar notificaciones push a la cuenta, tiene sentido este permiso solo que en los meses que us&#xE9; la app nunca recib&#xED; una sola notificaci&#xF3;n push</p>
</blockquote>
<ul>
<li>Contactos</li>
<li>leer tus contactos</li>
</ul>
<blockquote>
<p>Totalmente abusivo, no existe justificaci&#xF3;n ya que la app no tiene funciones visibles de interactuar con el directorio de contactos, violaci&#xF3;n a la privacidad importante.</p>
</blockquote>
<ul>
<li>Ubicaci&#xF3;n</li>
<li>ubicaci&#xF3;n precisa (seg&#xFA;n el GPS y la red)</li>
</ul>
<blockquote>
<p>Totalmente innecesario para la app, si utilizan como &quot;testeo de calidad de red&quot; est&#xE1;n recolectando esta informaci&#xF3;n sin consentimiento del usuario.</p>
</blockquote>
<ul>
<li>SMS</li>
<li>recibir mensajes de texto (SMS)</li>
<li>leer tus mensajes de texto (SMS o MMS)</li>
<li>Enviar mensajes SMS</li>
</ul>
<blockquote>
<p>Innecesario, ni siquiera utilizan para la Autenticaci&#xF3;n de 2 pasos(2FA), invasi&#xF3;n a la privacidad que puedan leer tus SMS o mandarlos desde tu n&#xFA;mero.</p>
</blockquote>
<ul>
<li>Fotos/Medios/Archivos</li>
<li>modificar o eliminar el contenido del almacenamiento USB</li>
<li>Leer el contenido del dispositivo USB</li>
</ul>
<blockquote>
<p>Abusivo, no hay justificaci&#xF3;n para esto, adem&#xE1;s de que pueda acceder a fotos y videos, en teor&#xED;a podr&#xED;a recolectar datos de otras aplicaciones almacenados como por ejemplo el backup de base de datos de WhatsApp (Conversaciones)</p>
</blockquote>
<ul>
<li>Informaci&#xF3;n de la conexi&#xF3;n Wi-Fi</li>
<li>ver conexiones Wi-Fi</li>
</ul>
<blockquote>
<p>OK, necesario.</p>
</blockquote>
<ul>
<li>ID del dispositivo e informaci&#xF3;n de llamadas</li>
<li>leer la identidad y el estado del dispositivo</li>
</ul>
<blockquote>
<p>Justificable, pero permitir&#xED;a almacenar el n&#xFA;mero, IMEI, IMSI e inclusive el n&#xFA;mero de t&#xE9;lefono con el que se est&#xE9; teniendo una llamada activa.</p>
</blockquote>
<ul>
<li>Otros</li>
<li>Recibir datos desde Internet</li>
<li>ver conexiones de red</li>
<li>acceso completo a la red</li>
</ul>
<blockquote>
<p>OK, totalmente necesarios.</p>
</blockquote>
<ul>
<li>Impedir que el dispositivo entre en modo de suspensi&#xF3;n</li>
</ul>
<blockquote>
<p>No hay riesgo de privacidad, pero quizas innecesario.</p>
</blockquote>
<p>Obviamente con todo lo expuesto recomiendo la desinstalaci&#xF3;n de esta app, al menos hasta que solucionen estos problemas.</p>
<p>La idea de este post (y de los siguientes relativos a seguridad) no es resaltar los errores cometidos sino concientizar sobre temas b&#xE1;sicos de seguridad, <strong>solo inform&#xE1;ndose uno puede llegar a protegerse.</strong></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><em><a href="http://www.androidcurso.com/index.php/tutoriales-android/41-unidad-7-seguridad-y-posicionamiento/282-el-esquema-de-permisos-en-android?ref=blog.melizeche.com">http://www.androidcurso.com/index.php/tutoriales-android/41-unidad-7-seguridad-y-posicionamiento/282-el-esquema-de-permisos-en-android</a></em> <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[El otro otro blog]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h5 id="quepasconelotroblog">&#xBF;Que pas&#xF3; con &lt;El Otro Blog&gt; ?</h5>
<p>Ya lo ten&#xED;a abandonado hace mucho y por cuestiones de costos ya no ten&#xED;a mucho sentido que se mantuviera en su propio dominio, despu&#xE9;s de mucho migr&#xE9; el blog de wordpress.com a</p>]]></description><link>https://blog.melizeche.com/el-otro-otro-blog/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1ca4</guid><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Mon, 20 Apr 2015 13:26:14 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2015/04/imageedit_9_2400443200.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h5 id="quepasconelotroblog">&#xBF;Que pas&#xF3; con &lt;El Otro Blog&gt; ?</h5>
<img src="https://blog.melizeche.com/content/images/2015/04/imageedit_9_2400443200.jpg" alt="El otro otro blog"><p>Ya lo ten&#xED;a abandonado hace mucho y por cuestiones de costos ya no ten&#xED;a mucho sentido que se mantuviera en su propio dominio, despu&#xE9;s de mucho migr&#xE9; el blog de wordpress.com a <a href="https://github.com/tryghost/Ghost?ref=blog.melizeche.com">Ghost</a> en un servidor propio y cambi&#xE9; a un subdominio de mi sitio. Pude migrar todos los datos gracias a <a href="https://github.com/jonhoo/wp2ghost?ref=blog.melizeche.com">wp2ghost</a>, una utilidad para convertir archivos de backup de wordpress a backup de ghost, funciona muy bien, excepto algunas cuestiones m&#xED;nimas de formato(Quiz&#xE1;s los posts viejos no se vean taan bien pero lo importante es que siguen online).</p>
<p>Lo negativo de todo esto son los enlaces que se van a romper porque que apuntan al dominio viejo pero igual se puede acceder al contenido a trav&#xE9;s de <a href="https://esotroblog.wordpress.com/?ref=blog.melizeche.com">https://esotroblog.wordpress.com/</a></p>
<p>Espero que este esfuerzo me inspire un poco mas para retomar esto.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Sobre proyectos, fellowship, Chile, civic hacking y otras yerbas (Vol I)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Escribo este post a modo de contar que estuve haciendo &#xFA;ltimamente y el avance de algunos proyectos geniales en los cuales estoy trabajando.</p>
<p><em><img class="aligncenter size-full wp-image-627" src="http://esotroblog.files.wordpress.com/2014/05/tedic1.jpg" alt="TEDIC" width="646" height="115">tl;dr</em> -&gt; Hace unas semanas estoy en Santiago de Chile como parte del Fellowship entre <a href="http://tedic.org/?ref=blog.melizeche.com" target="_blank">TEDIC</a> y la<a href="http://www.ciudadanointeligente.org/?ref=blog.melizeche.com" target="_blank"> Fundaci&#xF3;n Ciudadano Inteligente</a> que</p>]]></description><link>https://blog.melizeche.com/sobre-proyectos-fellowship-chile-civic-hacking-y-otras-yerbas-vol-i/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1c95</guid><category><![CDATA[Internet]]></category><category><![CDATA[Proyectos]]></category><category><![CDATA[Chile]]></category><category><![CDATA[FCI]]></category><category><![CDATA[MySociety]]></category><category><![CDATA[OpenNorth]]></category><category><![CDATA[Parlamento Abierto]]></category><category><![CDATA[PMO]]></category><category><![CDATA[poplus]]></category><category><![CDATA[TEDIC]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Mon, 12 May 2014 15:15:04 GMT</pubDate><media:content url="https://blog.melizeche.com/content/images/2015/04/imageedit_6_5838069509.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.melizeche.com/content/images/2015/04/imageedit_6_5838069509.png" alt="Sobre proyectos, fellowship, Chile, civic hacking y otras yerbas (Vol I)"><p>Escribo este post a modo de contar que estuve haciendo &#xFA;ltimamente y el avance de algunos proyectos geniales en los cuales estoy trabajando.</p>
<p><em><img class="aligncenter size-full wp-image-627" src="http://esotroblog.files.wordpress.com/2014/05/tedic1.jpg" alt="Sobre proyectos, fellowship, Chile, civic hacking y otras yerbas (Vol I)" width="646" height="115">tl;dr</em> -&gt; Hace unas semanas estoy en Santiago de Chile como parte del Fellowship entre <a href="http://tedic.org/?ref=blog.melizeche.com" target="_blank">TEDIC</a> y la<a href="http://www.ciudadanointeligente.org/?ref=blog.melizeche.com" target="_blank"> Fundaci&#xF3;n Ciudadano Inteligente</a> que tiene como objetivo&#xA0;el desarrollo del proyecto Parlamento Abierto, una plataforma de monitoreo ciudadano de las actividades del Congreso paraguayo, para as&#xED; saber quienes son los legisladores, sus CVs, sus proyectos de ley, como votan, ademas de proveer herramientas de comunicaci&#xF3;n entre ciudadan&#xED;a y parlamento. La idea es que Parlamento Abierto sea una herramienta para informar a la gente de lo que pasa dentro del Congreso, porque desde mi punto de vista sin informaci&#xF3;n disponible no puede haber libertad. &#xA0;Si, as&#xED; de interesante es este&#xA0;proyecto, del cual tengo el privilegio de estar como Coordinador y Desarrollador principal.</p>
<p>Para empezar dando un pantallazo general les cuento algo sobre la FCI. La Fundaci&#xF3;n Ciudadano Inteligente es una organizaci&#xF3;n que apuesta a fortalecer la democracia promoviendo la transparencia y la participaci&#xF3;n ciudadana a trav&#xE9;s del uso innovador de las tecnolog&#xED;as de la informaci&#xF3;n, desarrollando proyectos como:</p>
<ul>
	<li><a href="http://votainteligente.cl/?ref=blog.melizeche.com" target="_blank">VotaInteligente</a>: Un espacio de informaci&#xF3;n y comunicaci&#xF3;n entre los ciudadanos y los candidatos a representantes en cualquier tipo de elecci&#xF3;n.</li>
	<li><a href="http://www.inspectordeintereses.cl/?ref=blog.melizeche.com" target="_blank">Inspector de Intereses</a>: Herramienta para identificar y denunciar conflictos de intereses parlamentarios.</li>
	<li><a href="http://deldichoalhecho.cl/?ref=blog.melizeche.com" target="_blank">Del Dicho al Hecho</a>: Plataforma para dar seguimiento al cumplimiento de promesas electorales.</li>
</ul>
Para citar solo algunos de los muchos proyectos interesantes de la FCI.
<p>Esta cooperaci&#xF3;n con la FCI es el primer paso para desarrollar &quot;Parlamento Abierto&quot;, utilizando varias herramientas del proyecto <a href="http://poplus.org/?ref=blog.melizeche.com" target="_blank">Poplus</a>, proyecto Open Source creado principalmente por <a href="http://poplus.org/?ref=blog.melizeche.com" target="_blank">MySociety</a>&#xA0;(Inglaterra),<a href="http://opennorth.ca/?ref=blog.melizeche.com" target="_blank"> OpenNorth</a>(Canada),<a href="http://www.ciudadanointeligente.org/?ref=blog.melizeche.com" target="_blank"> FCI</a>(Chile) y varios colaboradores alrededor del mundo con el fin de proveer de herramientas c&#xED;vicas modulares que se puedan adaptar a la realidad de cualquier pa&#xED;s.</p>
<p>La primera semana de trabajo arrancamos viendo algunos de los componentes de Poplus que usar&#xED;amos, empezando por&#xA0;<a href="https://github.com/mysociety/popit?ref=blog.melizeche.com" target="_blank">PopIt</a>, que es un sistema que permite almacenar y compartir informaci&#xF3;n sobre personas, organizaciones y cargos. PopIt se usar&#xED;a para almacenar los datos de cada legislador para as&#xED; poder ser usado por los otros componentes o inclusive aplicaciones externas ya que tiene un API para acceder a estos datos.</p>
<p><a href="http://esotroblog.files.wordpress.com/2014/05/legisla.png?ref=blog.melizeche.com"><img class="wp-image-622" src="http://esotroblog.files.wordpress.com/2014/05/legisla.png" alt="Sobre proyectos, fellowship, Chile, civic hacking y otras yerbas (Vol I)" width="438" height="166"></a> Ejemplo de los datos</p>
<p>Para obtener la informaci&#xF3;n necesaria hizo falta programar un &quot;scraper&quot; que b&#xE1;sicamente es un script que busca y recupera informaci&#xF3;n especifica de sitios web, en este caso fueron los sitios del Senado y de Diputados para obtener la lista de los legisladores, cosa que se pudo hacer sin mayor dificultad y actualmente estos datos est&#xE1;n cargados en una instancia de PopIt.</p>
<p>Tambi&#xE9;n empezamos a familiarizarnos con <a href="https://github.com/ciudadanointeligente/bill-it?ref=blog.melizeche.com" target="_blank">Bill-It&#xA0;</a>que es un sistema de gesti&#xF3;n de documentos orientado a darle seguimiento a los proyectos de ley. Bill-It es uno de los componentes mas importantes ya que permite trackear los proyectos del parlamento y asociarlos con los legisladores (Info que provee PopIt).</p>
<p><a href="http://esotroblog.files.wordpress.com/2014/05/leyes.png?ref=blog.melizeche.com"><img class="size-full wp-image-624" src="http://esotroblog.files.wordpress.com/2014/05/leyes.png" alt="Sobre proyectos, fellowship, Chile, civic hacking y otras yerbas (Vol I)" width="646" height="304"></a> Datos de ejemplo</p>
<p>La recopilaci&#xF3;n de esta informaci&#xF3;n est&#xE1; en proceso debido a la complejidad innecesaria del Sistema de Informaci&#xF3;n Legislativa del congreso, se pudieron extraer varios proyectos pero no todos por el momento pero con un poco mas de esfuerzo y dedicaci&#xF3;n ya va a salir dentro de poco.</p>
<p>No quiero extenderme demasiado en un solo post para no cansar demasiado y eso que aun no cont&#xE9; nada sobre WriteIt y otros componentes que estamos usando ni lo que fue la Conferencia PoplusCon pero eso viene en el pr&#xF3;ximo post.</p>
<p>&#xA0;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Estado de la vulnerabilidad "Heartbleed" en el sistema bancario de Paraguay]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><a href="http://esotroblog.files.wordpress.com/2014/04/heartbleed.png?ref=blog.melizeche.com"><img id="i-442" class=" wp-image aligncenter" src="http://esotroblog.files.wordpress.com/2014/04/heartbleed.png?w=331" alt="Imagen" width="219" height="264"></a></p><p>Antes de migrar el blog aprovecho esta la oportunidad actualizarlo con el tema &quot;de moda&quot; en cuanto a seguridad, seguramente en estos &#xFA;ltimos d&#xED;as se toparon la noticia de la vulnerabilidad<a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160&amp;ref=blog.melizeche.com" target="_blank"> CVE-2014-0160</a>&#xA0;de la librer&#xED;a OpenSSL, mas conocida como <a href="http://heartbleed.com/?ref=blog.melizeche.com" target="_blank">Heartbleed</a>.</p><p>Antes que</p>]]></description><link>https://blog.melizeche.com/estado-de-la-vulnerabilidad-heartbleed-en-el-sistema-bancario-de-paraguay/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1c94</guid><category><![CDATA[Sin Categoria]]></category><category><![CDATA[Amambay]]></category><category><![CDATA[atlas]]></category><category><![CDATA[bancard]]></category><category><![CDATA[Bancos]]></category><category><![CDATA[bbva]]></category><category><![CDATA[bcp]]></category><category><![CDATA[certificado]]></category><category><![CDATA[heartbleed]]></category><category><![CDATA[Itapua]]></category><category><![CDATA[iTau]]></category><category><![CDATA[openssl]]></category><category><![CDATA[paraguay]]></category><category><![CDATA[procard]]></category><category><![CDATA[Regional]]></category><category><![CDATA[ssl]]></category><category><![CDATA[Sudameris]]></category><category><![CDATA[vision]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Wed, 16 Apr 2014 20:11:17 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p><a href="http://esotroblog.files.wordpress.com/2014/04/heartbleed.png?ref=blog.melizeche.com"><img id="i-442" class=" wp-image aligncenter" src="http://esotroblog.files.wordpress.com/2014/04/heartbleed.png?w=331" alt="Imagen" width="219" height="264"></a></p><p>Antes de migrar el blog aprovecho esta la oportunidad actualizarlo con el tema &quot;de moda&quot; en cuanto a seguridad, seguramente en estos &#xFA;ltimos d&#xED;as se toparon la noticia de la vulnerabilidad<a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160&amp;ref=blog.melizeche.com" target="_blank"> CVE-2014-0160</a>&#xA0;de la librer&#xED;a OpenSSL, mas conocida como <a href="http://heartbleed.com/?ref=blog.melizeche.com" target="_blank">Heartbleed</a>.</p><p>Antes que nada hay que aclarar que Heartbleed NO ES un virus ni tampoco un gusano(como muchos sitios de noticias reportaron), es un Bug, un error de programaci&#xF3;n. Lo peligroso de esta vulnerabilidad pasa por tres factores: El hecho que es muy dificil&#xA0;detectar si un servidor fue victima de este ataque, La popularidad de OpenSSL y el tiempo que lleva presente.</p><p><a href="http://esotroblog.files.wordpress.com/2014/04/sslev.png?ref=blog.melizeche.com"><img id="i-467" class="size-full wp-image aligncenter" src="http://esotroblog.files.wordpress.com/2014/04/sslev.png?w=351" alt="Imagen"></a></p><p>OpenSSL se utiliza para proveer conexiones seguras y encriptadas mediante los protocolos <a href="http://es.wikipedia.org/wiki/Transport_Layer_Security?ref=blog.melizeche.com" target="_blank">SSL/TLS</a>&#xA0;(como cuando aparece el candado en la barra de direcciones y en vez de http aparece https), pero no solamente se utiliza en la web, sino hay muchas aplicaciones como el correo electr&#xF3;nico, mensajer&#xED;a instant&#xE1;nea y muchos dispositivos de red.</p><p>El fallo pas&#xF3; sin detectado desde inicios del 2012 hasta unos dias atr&#xE1;s(07-04-2014), durante todo ese tiempo millones de servidores estuvieron vulnerables, siendo as&#xED; posible el robo de datos, incluyendo usuarios, contrase&#xF1;as e inclusive las claves de encriptaci&#xF3;n, las cuales permiten desencriptar todo el trafico inclusive, trafico anteriormente capturado.</p><p>Para m&#xE1;s informaci&#xF3;n pueden ver este <a href="http://ejempla.com/futuro/la-falla-que-puso-en-riesgo-millones-de-datos?ref=blog.melizeche.com" target="_blank">articulo de Ejempla</a> o el &quot;sitio oficial&quot; de la vulnerabilidad <a href="http://heartbleed.com/?ref=blog.melizeche.com" target="_blank">http://heartbleed.com</a></p><p>El fallo ya fue corregido y como primer paso para no ser victimas de esta situaci&#xF3;n es actualizar los servidores afectados, como ya coment&#xE9; mas arriba la versi&#xF3;n de OpenSSL que corrige el fallo se public&#xF3; el <a href="http://git.openssl.org/gitweb/?p=openssl.git%3Ba%3Dblob_plain%3Bf%3DCHANGES%3Bhb%3Drefs%2Fheads%2FOpenSSL_1_0_1-stable&amp;ref=blog.melizeche.com" target="_blank">7 de Abril del 2014</a>.</p><p>Pero no basta con actualizar la librer&#xED;a ya que si la vulnerabilidad fue explotada en el pasado(no deja rastros) la clave de encriptaci&#xF3;n pudo haber sido robada, con esto el atacante tiene<span style="color:#171717;">&#xA0;la posibilidad de usar las claves para que su sitio o servicio fraudulento pueda hacerse pasar por el leg&#xED;timo.&#xA0;</span></p><p>Por eso el siguiente paso es generar nuevas claves de encriptaci&#xF3;n, revocar los certificados SSL para luego solicitar nuevos certificados SSL.</p><p>Bueno, ahora vamos a la raz&#xF3;n de este art&#xED;culo</p><p>Realice un an&#xE1;lisis sobre el estado de los sitios web de banca electr&#xF3;nica de Paraguay, asi como tambi&#xE9;n de otros actores del sistema financiero como las procesadoras de pagos. Fue grata la sorpresa al encontrar que todos los sitios ya se encontraban parchados y no eran vulnerables al Heartbleed, pero quise indagar un poco m&#xE1;s con respecto a la fecha de emisi&#xF3;n de los certificados SSL.</p><p>Es muy poco probable que esta vulnerabilidad haya sido explotada en alg&#xFA;n sitio de banca electronica del pais pero no deja de ser posible.</p><h2>Metodolog&#xED;a</h2><p>Cree un script que comprueba cada los certificados de todos los bancos habilitados por el BCP(incluyendo al BCP) y las procesadoras de tarjetas de cr&#xE9;dito. Utiliza las librerias M2Crypto y OpenSSL de python para obtener los datos. Lo sub&#xED; a mi cuenta de github&#xA0;<a href="https://github.com/melizeche/heartbleedpy?ref=blog.melizeche.com" target="_blank">https://github.com/melizeche/heartbleedpy</a>&#xA0;(script r&#xE1;pido y sucio, se aceptan mejoras).&#xA0;</p><h2>Resultados</h2><p>De 6 sitios no se pudo precisar si usan OpenSSL para las conexiones seguras, si no lo utilizan no son ni estuvieron en vulnerables.</p><p><a href="http://esotroblog.files.wordpress.com/2014/04/ssl.png?ref=blog.melizeche.com"><img id="i-522" class="size-full wp-image aligncenter" src="http://esotroblog.files.wordpress.com/2014/04/ssl.png?w=595" alt="Imagen"></a></p><p>Dejo una capturas de pantalla aqu&#xED; pero es mas interesante ver en mi servidor donde se actualiza cada 10 minutos la informaci&#xF3;n</p><h2><a href="//melizeche.com/heartbleedpy/" target="_blank">Para ver los datos actualizados entrar a&#xA0;http://melizeche.com/heartbleedpy/&#xA0;donde se explica bien como leer la tabla<img id="i-524" class="size-full wp-image aligncenter" src="http://esotroblog.files.wordpress.com/2014/04/bancos1.png?w=650" alt="Imagen"></a>Conclusi&#xF3;n</h2><p>La noticia positiva es que ninguna entidad es vulnerable al Heartbleed pero por otro lado vemos que hay muchos certificados que a&#xFA;n no se renovaron, como explique mas arriba, el riesgo es bajo al ser poco probable que alg&#xFA;n banco local haya sido victima en el pasado pero no deja de ser un factor a tener en cuenta</p><p>Hay que destacar la r&#xE1;pida respuesta de parte de los encargados de seguridad de los bancos al parchar la vulnerabilidad pero como se explico m&#xE1;s arriba no es suficiente eso y ser&#xED;a interesante que las entidades emitan alg&#xFA;n comunicado explicando las medidas que se tomaron.</p><p>Espero que con los d&#xED;as la <a href="http://melizeche.com/heartbleedpy/?ref=blog.melizeche.com" target="_blank">tabla </a>se vaya poniendo cada vez m&#xE1;s verde.</p><p>Si algo no qued&#xF3; claro o pens&#xE1;s que no es preciso o ten&#xE9;s alg&#xFA;n aporte no dudes en comentarlo m&#xE1;s abajo.</p><p>&#xA0;</p><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Solucionar "Cannot run program emulator: error=2" de adb y android emulator en Ubuntu 13.10 64bits]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Recientemente instal&#xE9; Ubuntu 13.10 64bits y me encontr&#xE9; con que &#xA0;no pod&#xED;a ejecutar el emulador ni el adb del SDK de Android.</p>
<p>Habiendome fijado en haber instalado la versi&#xF3;n correcta del SDK no entend&#xED;a porqu&#xE9; no funcionaba y me</p>]]></description><link>https://blog.melizeche.com/solucionar-cannot-run-program-emulator-error2-de-adb-y-android-emulator-en-ubuntu-13-10-64bits/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1ca3</guid><category><![CDATA[Android]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Tutoriales]]></category><category><![CDATA[Ubuntu/Kubuntu]]></category><category><![CDATA[13.10]]></category><category><![CDATA[32bit]]></category><category><![CDATA[64bit]]></category><category><![CDATA[adb]]></category><category><![CDATA[adt]]></category><category><![CDATA[avd]]></category><category><![CDATA[eclipse]]></category><category><![CDATA[emulator]]></category><category><![CDATA[exists]]></category><category><![CDATA[file not found]]></category><category><![CDATA[i386]]></category><category><![CDATA[saucy]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[x86]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Mon, 21 Oct 2013 05:48:24 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Recientemente instal&#xE9; Ubuntu 13.10 64bits y me encontr&#xE9; con que &#xA0;no pod&#xED;a ejecutar el emulador ni el adb del SDK de Android.</p>
<p>Habiendome fijado en haber instalado la versi&#xF3;n correcta del SDK no entend&#xED;a porqu&#xE9; no funcionaba y me daba el error mencionado ademas de &quot;No existe el archivo o directorio&quot;, trat&#xE9; de ejecutarlo directamente desde la consola y me daba el mismo error.</p>
<p>Despues de haber investigado encontr&#xE9; que ten&#xED;a que instalar el paquete &quot;ia32-libs&quot; para solucionar la ejecuci&#xF3;n de un binario de 32bits en un sistema de 64bits pero no me dej&#xF3; porque en Ubuntu 13.10 no existe el paquete. Esto se debe a que desde Ubuntu 13.04 los las librerias 32bits de pueden instalar sin problemas solo especificado la arquitectura al hacer &quot;apt-get install&quot; (sudo apt-get install nombrepaquete:i386 por ejemplo).</p>
<p>Haciendola corta encontr&#xE9; que las librer&#xED;as de x86 que necesitaba eran libc6, gcc y ncurses entonces instal&#xE9; los paquetes y listo.</p>
<p><code> sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 </code></p>
<p>Ahora funciona sin problemas.</p>
<p>&#xA0;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Phishing para robar tarjetas de crédito de Itaú]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Ayer le&#xED; este tweet &#xA0;en el que avisaban que estaban haciendo&#xA0;<a href="https://twitter.com/?ref=blog.melizeche.com#!/t3r3r3/status/200378966958292992">phishing</a><blockquote class="twitter-tweet" lang="en"><p lang="es" dir="ltr">Est&#xE1;n enviando e-mails de phishing de Itau para robar datos. Ch&#xE1;ke.</p>&#x2014; Daniel Duarte (@dduart3) <a href="https://twitter.com/dduart3/status/200378966958292992?ref=blog.melizeche.com">May 10, 2012</a></blockquote></p>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>&#xA0;entonces le ped&#xED; que me reenviara el correo que le hab&]]></description><link>https://blog.melizeche.com/phishing-para-robar-tarjetas-de-credito-de-itau/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1c64</guid><category><![CDATA[Internet]]></category><category><![CDATA[banco]]></category><category><![CDATA[Seguridad]]></category><category><![CDATA[CVE-2011-0654]]></category><category><![CDATA[nmap]]></category><category><![CDATA[Informes]]></category><category><![CDATA[hacking]]></category><category><![CDATA[iTau]]></category><category><![CDATA[paraguay]]></category><category><![CDATA[phishing]]></category><category><![CDATA[suplantación de identidad]]></category><category><![CDATA[tarjeta de credito]]></category><category><![CDATA[web]]></category><category><![CDATA[windows]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Thu, 10 May 2012 16:03:30 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Ayer le&#xED; este tweet &#xA0;en el que avisaban que estaban haciendo&#xA0;<a href="https://twitter.com/?ref=blog.melizeche.com#!/t3r3r3/status/200378966958292992">phishing</a><blockquote class="twitter-tweet" lang="en"><p lang="es" dir="ltr">Est&#xE1;n enviando e-mails de phishing de Itau para robar datos. Ch&#xE1;ke.</p>&#x2014; Daniel Duarte (@dduart3) <a href="https://twitter.com/dduart3/status/200378966958292992?ref=blog.melizeche.com">May 10, 2012</a></blockquote></p>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>&#xA0;entonces le ped&#xED; que me reenviara el correo que le hab&#xED;a llegado<a href="http://esotroblog.files.wordpress.com/2012/05/mailitau.png?ref=blog.melizeche.com"><img class="alignleft size-full wp-image-380" title="mailItau" src="http://esotroblog.files.wordpress.com/2012/05/mailitau.png" alt width="510" height="438"></a>
<!--more-->Como se puede ver el remitente no proviene de itau.com.py como tendr&#xED;a que ser si fuese un correo institucional y el link que dice http://www.itau.com.py realmente lleva a otro dominio hospedado en china, en la siguiente imagen se puede ver la copia de la pagina principal de Ita&#xFA;(en la barra de direcci&#xF3;n se ve que el dominio no es el de Ita&#xFA;)
<p><a href="http://esotroblog.files.wordpress.com/2012/05/itau001.png?ref=blog.melizeche.com"><img class="alignleft size-full wp-image-387" title="Itau00" src="http://esotroblog.files.wordpress.com/2012/05/itau001.png" alt width="510" height="288"></a></p>
<p>Si ingresamos alg&#xFA;n valor en el campo documento nos lleva a la siguiente pantalla(copia exacta nuevamente del sitio de Ita&#xFA;)</p>
<p><a href="http://esotroblog.files.wordpress.com/2012/05/itau21.png?ref=blog.melizeche.com"><img class="alignleft size-full wp-image-390" title="Itau2" src="http://esotroblog.files.wordpress.com/2012/05/itau21.png" alt width="510" height="288"></a></p>
<p>Nos pide ingresar el n&#xFA;mero de cuenta, una vez mas se puede ingresar cualquier numero aleatorio ya que lo que realmente quiere el criminal est&#xE1; en la siguiente pantalla</p>
<p><a href="http://esotroblog.files.wordpress.com/2012/05/itau32.png?ref=blog.melizeche.com"><img class="alignleft  wp-image-391" title="Itau3" src="http://esotroblog.files.wordpress.com/2012/05/itau32.png" alt width="510" height="288"></a></p>
<p>Normalmente aqu&#xED; estar&#xED;a el teclado&#xA0;num&#xE9;rico&#xA0;en pantalla para ingresar el PIN pero en este sitio, el atacante pide para ingresar los datos de la tarjeta de cr&#xE9;dito necesarios para realizar cualquier compra online para que al llenar los datos y darle &quot;Siguiente&quot; env&#xED;e la informaci&#xF3;n al atacante.</p>
<p>Despues de esta pantalla aparece una de agradecimiento para luego redirigir al sitio web oficial de Ita&#xFA; para no levantar sospechas.</p>
<p>Cabe aclarar que la instituci&#xF3;n bancaria no puede hacer practicamente nada para evitar estos tipos de estafa, mas que advertir a sus clientes, es cuesti&#xF3;n de que el usuario se informe y para evitar caer en esto.</p>
<p>Siempre antes de ingresar datos sensibles hay que comprobar que el sitio sea el que realmente dice ser y que la autentificaci&#xF3;n sea segura(o al menos mas segura), un parametro puede ser el icono del candado en la barra de direcciones, ejemplo:</p>
<p><a href="http://esotroblog.files.wordpress.com/2012/05/itau4.png?ref=blog.melizeche.com"><img class="alignleft size-full wp-image-394" title="itau4" src="http://esotroblog.files.wordpress.com/2012/05/itau4.png" alt width="510" height="34"></a></p>
<p>Probablemente el sitio de china(vpcomponents.com) tampoco sabe nada del asunto, el atacante encontr&#xF3; una vulnerabilidad en el sitio y decidi&#xF3; usarlo de hosting para su estafa, haciendo un escaneo de puertos pude comprobar que estaba abierto el 3389 que es el puesto de la administraci&#xF3;n remota en un servidor windows.</p>
<p>Como para evitar que mas usuarios caigan en la trampa de este atacante decid&#xED; atacar el servidor que hosteaba(vpcomponents.com) para hacer que caiga, lo hice utilizando un exploit que aprovechaba la vulnerabilidad &#xA0;<a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-0654&amp;ref=blog.melizeche.com">CVE-2011-0654</a>&#xA0;que afecta a varios productos Microsoft como el Windows 2003 Server R2 en el cual estaba instalado en dicho servidor y avis&#xE9; al contacto t&#xE9;cnico de vpcomponents.com que su sitio estaba comprometido para que lo solucione.</p>
<h2>Tambi&#xE9;n te puede interesar</h2>
<a href="http://elotroblog.com/2010/11/02/tu-cuenta-bancaria-es-segura-estudio-comparativo-de-seguridad-en-bancos-de-paraguay/?ref=blog.melizeche.com">Tu cuenta bancaria, es segura? Estudio comparativo de Seguridad en Bancos de&#xA0;Paraguay</a><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[El Triángulo de las Bermudas de la Productividad (o de la improductividad)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><a href="http://esotroblog.files.wordpress.com/2010/12/wpid-triangle-of-productivity1.jpg?ref=blog.melizeche.com"><img style="display:block;margin-right:auto;margin-left:auto;" src="http://esotroblog.files.wordpress.com/2010/12/wpid-triangle-of-productivity.jpg" alt="image"></a></p>
<p><em><strong>&quot;Mas claro, Agua&quot;</strong></em> reza el dicho popular...</p>
<!--kg-card-end: markdown-->]]></description><link>https://blog.melizeche.com/el-triangulo-de-las-bermudas-de-la-productividad-o-de-la-improductividad/</link><guid isPermaLink="false">675a802b63c90cb6a9aa1ca2</guid><category><![CDATA[Boludeces]]></category><category><![CDATA[Divagues]]></category><category><![CDATA[humor]]></category><dc:creator><![CDATA[Marcelo Elizeche Landó]]></dc:creator><pubDate>Fri, 31 Dec 2010 14:14:33 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p><a href="http://esotroblog.files.wordpress.com/2010/12/wpid-triangle-of-productivity1.jpg?ref=blog.melizeche.com"><img style="display:block;margin-right:auto;margin-left:auto;" src="http://esotroblog.files.wordpress.com/2010/12/wpid-triangle-of-productivity.jpg" alt="image"></a></p>
<p><em><strong>&quot;Mas claro, Agua&quot;</strong></em> reza el dicho popular...</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>