<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RORO's blog</title><link>https://blog.rodolpheg.xyz/fr/</link><description>Recent content on RORO's blog</description><generator>Hugo</generator><language>fr</language><managingEditor>contact@rodolpheg.xyz (0xRo)</managingEditor><webMaster>contact@rodolpheg.xyz (0xRo)</webMaster><lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.rodolpheg.xyz/fr/index.xml" rel="self" type="application/rss+xml"/><item><title>Architecture de Semgrep : Reference technique complete</title><link>https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Semgrep&lt;/strong> (Semantic Grep) est un outil d&amp;rsquo;analyse statique multi-langage qui identifie du code par sa &lt;em>structure&lt;/em> &amp;ndash; et non simplement par son texte &amp;ndash; en utilisant un Abstract Syntax Tree unifie et un langage de patterns riche. Ce document couvre l&amp;rsquo;architecture interne complete, du point d&amp;rsquo;entree CLI a la detection de taint sink.&lt;/p>
&lt;/blockquote>
&lt;h2 id="table-des-matieres">Table des matieres&lt;/h2>
&lt;ol start="0">
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#0-introduction">Introduction&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#01-quest-ce-que-le-sast">Qu&amp;rsquo;est-ce que le SAST ?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#02-histoire-de-semgrep">Histoire de Semgrep&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#1-architecture-de-haut-niveau">Architecture de haut niveau&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#2-decomposition-des-composants">Decomposition des composants&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#3-le-pipeline-danalyse-complet">Le pipeline d&amp;rsquo;analyse complet&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#4-decouverte-et-filtrage-des-cibles">Decouverte et filtrage des cibles&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#5-parsing-et-optimisation-des-regles">Parsing et optimisation des regles&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#6-parsing-et-last-universel">Parsing et l&amp;rsquo;AST universel&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#7-le-moteur-de-matching">Le moteur de matching&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#8-le-langage-intermediaire-il-et-le-cfg">Le langage intermediaire (IL) et le CFG&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#9-analyse-de-taint-dataflow">Analyse de taint (Dataflow)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#10-pipeline-de-sortie-et-de-reporting">Pipeline de sortie et de reporting&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#11-architecture-osemgrep--rpc">Architecture OSemgrep / RPC&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blog.rodolpheg.xyz/fr/posts/semgrep-architecture/#12-structures-de-donnees-cles">Structures de donnees cles&lt;/a>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-1-pourquoi-">-1. Pourquoi ?&lt;/h2>
&lt;p>Je travaille en tant qu&amp;rsquo;ingenieur DevSecOps depuis bientot quatre ans. Quand j&amp;rsquo;ai commence, j&amp;rsquo;avais peu d&amp;rsquo;exposition a des outils comme le SAST, le SCA ou le DAST. Mon etat d&amp;rsquo;esprit etait fermement ancre dans la securite offensive. Le test d&amp;rsquo;intrusion etait l&amp;rsquo;objectif, le reve.&lt;/p></description></item><item><title>Une nuit pour hacker 2026: Thread of Doom</title><link>https://blog.rodolpheg.xyz/fr/posts/threadofdoom/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/threadofdoom/</guid><description>&lt;h2 id="synthese">Synthese&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Challenge&lt;/strong> : Thread of Doom&lt;/li>
&lt;li>&lt;strong>Categorie&lt;/strong> : Reverse Engineering&lt;/li>
&lt;li>&lt;strong>Flag&lt;/strong> : &lt;code>NHK26{VirtualProtect_Overwritten}&lt;/code>&lt;/li>
&lt;li>&lt;strong>Binaire :&lt;/strong> &lt;code>NHK_CrackMe_V3.exe&lt;/code> (PE32, x86, 43520 octets)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="vue-densemble">Vue d&amp;rsquo;ensemble&lt;/h2>
&lt;p>Thread of Doom est un crackme Windows qui affiche une boite de dialogue avec un bouton &amp;ldquo;Demo&amp;rdquo;. Cliquer sur ce bouton affiche une erreur : &lt;em>&amp;ldquo;Tu n&amp;rsquo;es pas premium ! Prix : 2 BTC&amp;rdquo;&lt;/em>. L&amp;rsquo;objectif est de comprendre les mecanismes de protection du binaire et d&amp;rsquo;extraire le flag cache.&lt;/p></description></item><item><title>Enketo 6.2.1 - Auth-Bypass, SSRF et abus de XXE navigateur pour lecture de fichiers</title><link>https://blog.rodolpheg.xyz/fr/posts/enketo-auth-bypass-ssrf-xxe-and-file-read/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/enketo-auth-bypass-ssrf-xxe-and-file-read/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Article original : &lt;a href="https://offenskill.com/blog/enketo-arbitrary-file-read/">OffenSkill - Enketo 6.2.1 - Auth-Bypass, SSRF, and XXE Browser Abuse to File Read&lt;/a>&lt;/p>
&lt;p>Cette session de &lt;a href="https://offenskill.com/training">formation&lt;/a> était axée sur la revue de code en boîte blanche, l&amp;rsquo;application et l&amp;rsquo;introspection runtime du système.&lt;br>
Nous voulions travailler sur un framework backend JavaScript et &lt;a href="https://enketo.org/">Enketo Express&lt;/a> semblait être un bon candidat.
Le code source est disponible sur &lt;a href="https://github.com/enketo/enketo-express">GitHub - enketo/enketo-express&lt;/a> et la version que nous avons évaluée était la &lt;a href="https://github.com/enketo/enketo-express/releases/tag/6.2.1">version 6.2.1&lt;/a>, construite avec les Dockerfiles officiels.&lt;/p></description></item><item><title>Amazon AppSec CTF : HalCrypto</title><link>https://blog.rodolpheg.xyz/fr/posts/halcrypto/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/halcrypto/</guid><description>&lt;h2 id="synthese">Synthese&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Challenge&lt;/strong> : HalCrypto&lt;/li>
&lt;li>&lt;strong>Categorie&lt;/strong> : Securite Web&lt;/li>
&lt;li>&lt;strong>Vulnerabilite&lt;/strong> : Contournement de la validation JWT via confusion d&amp;rsquo;URL avec le symbole @&lt;/li>
&lt;li>&lt;strong>Impact&lt;/strong> : Contournement de l&amp;rsquo;authentification menant a un acces administrateur&lt;/li>
&lt;li>&lt;strong>Flag&lt;/strong> : &lt;code>HTB{r3d1r3c73d_70_my_s3cr37s}&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="vue-densemble-de-la-vulnerabilite">Vue d&amp;rsquo;ensemble de la vulnerabilite&lt;/h2>
&lt;h3 id="diagramme-du-flux-dattaque">Diagramme du flux d&amp;rsquo;attaque&lt;/h3>
&lt;pre tabindex="0">&lt;code class="language-mermaid" data-lang="mermaid">graph TD
 A[User Login + Attacker JWT] --&amp;gt; B[AuthMiddleware]
 B --&amp;gt; C[Extract JKU URL from Header]
 C --&amp;gt; D{Validate JKU URL&amp;lt;br/&amp;gt;lastIndexOf check}
 D --&amp;gt;|&amp;#34;URL starts with AUTH_PROVIDER&amp;lt;br/&amp;gt;string-based comparison&amp;#34;| E[PASSES]
 D --&amp;gt;|&amp;#34;Does not start with AUTH_PROVIDER&amp;#34;| R[Rejected]

 E --&amp;gt; F[&amp;#34;Fetch JWKS from JKU URL&amp;#34;]
 F --&amp;gt; G[&amp;#34;JWT Verification with&amp;lt;br/&amp;gt;attacker&amp;#39;s public key&amp;#34;]
 G --&amp;gt; H[Auth Bypass]
 H --&amp;gt; I[Flag]

 subgraph &amp;#34;URL Confusion&amp;#34;
 J[&amp;#34;Validator sees:&amp;lt;br/&amp;gt;http://127.0.0.1:1337@attacker.com/...&amp;lt;br/&amp;gt;starts with AUTH_PROVIDER ✓&amp;#34;]
 K[&amp;#34;HTTP client connects to:&amp;lt;br/&amp;gt;attacker.com&amp;lt;br/&amp;gt;treats 127.0.0.1:1337 as credentials&amp;#34;]
 end

 D -.-&amp;gt; J
 F -.-&amp;gt; K
&lt;/code>&lt;/pre>&lt;h2 id="analyse-source-to-sink">Analyse source-to-sink&lt;/h2>
&lt;h3 id="1-point-dentree---authentification-jwt-source">1. Point d&amp;rsquo;entree - Authentification JWT (Source)&lt;/h3>
&lt;p>La vulnerabilite commence lorsque le AuthMiddleware traite les tokens JWT :&lt;/p></description></item><item><title>Amazon AppSec CTF : PageOneHTML</title><link>https://blog.rodolpheg.xyz/fr/posts/pageronehtlm/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/pageronehtlm/</guid><description>&lt;h2 id="résumé-exécutif">Résumé exécutif&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Défi&lt;/strong> : PageOneHTML&lt;/li>
&lt;li>&lt;strong>Catégorie&lt;/strong> : Sécurité Web&lt;/li>
&lt;li>&lt;strong>Vulnérabilité&lt;/strong> : Server-Side Request Forgery (SSRF) via le protocole gopher://&lt;/li>
&lt;li>&lt;strong>Impact&lt;/strong> : Accès à un endpoint d&amp;rsquo;API interne menant à la divulgation du flag&lt;/li>
&lt;li>&lt;strong>Flags&lt;/strong> :
&lt;ul>
&lt;li>Local : &lt;code>HTB{f4k3_fl4g_f0r_t3st1ng}&lt;/code>&lt;/li>
&lt;li>Distant : &lt;code>HTB{l1bcurL_pla7h0r4_0f_pr0tocOl5}&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="analyse-source-to-sink">Analyse Source-to-Sink&lt;/h2>
&lt;h3 id="1-point-dentrée---entrée-utilisateur-source">1. Point d&amp;rsquo;entrée - Entrée utilisateur (Source)&lt;/h3>
&lt;p>La vulnérabilité commence au endpoint &lt;code>/api/convert&lt;/code> qui accepte du contenu markdown contrôlé par l&amp;rsquo;utilisateur :&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// routes/index.js:15-28
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">router&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/api/convert&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">markdown_content&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">port_images&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// User input
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">markdown_content&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">html&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">MDHelper&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">makeHtml&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">markdown_content&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Convert MD to HTML
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">port_images&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="c1">// If port_images is true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nx">ImageConverter&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">PortImages&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">html&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// Process images
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">then&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">newHTML&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">newHTML&lt;/span> &lt;span class="p">}))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">html&lt;/span> &lt;span class="p">}));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">html&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">403&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Missing parameters!&amp;#39;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-traitement-des-images---confusion-de-protocole">2. Traitement des images - Confusion de protocole&lt;/h3>
&lt;p>Le module &lt;code>ImageConverter&lt;/code> extrait toutes les balises &lt;code>&amp;lt;img&amp;gt;&lt;/code> et traite leurs attributs &lt;code>src&lt;/code> :&lt;/p></description></item><item><title>Comprendre les Code Property Graphs</title><link>https://blog.rodolpheg.xyz/fr/posts/understanding-code-property-graphs/</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/understanding-code-property-graphs/</guid><description>&lt;p>Quand j&amp;rsquo;ai commence a developper des outils pour l&amp;rsquo;audit de code source, mon besoin principal etait de suivre les flux de donnees corrompues (tainted) a travers des bases de code complexes lors de revues de code manuelles. Au depart, je me suis tourne vers Tree-Sitter, qui s&amp;rsquo;est avere excellent pour l&amp;rsquo;analyse de fichiers individuels grace a ses capacites de parsing rapide et incrementiel. Cependant, en passant a des bases de code plus volumineuses avec des dependances inter-fichiers complexes et des flux de donnees, l&amp;rsquo;approche AST-only de Tree-Sitter est devenue limitante. Le defi n&amp;rsquo;etait pas simplement de parser des fichiers individuels. Il s&amp;rsquo;agissait de comprendre comment les donnees circulent entre les fonctions, a travers les modules et via differents chemins d&amp;rsquo;execution lors d&amp;rsquo;evaluations de securite manuelles approfondies.&lt;/p></description></item><item><title>L'audit de code pour les nuls</title><link>https://blog.rodolpheg.xyz/fr/posts/code-auditing--101/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/code-auditing--101/</guid><description>&lt;h2 id="sujets-abordés">Sujets abordés&lt;/h2>
&lt;p>Cet article explore l&amp;rsquo;évolution de la revue de code manuelle vers les tests de sécurité automatisés, en couvrant :&lt;/p>
&lt;ul>
&lt;li>La réalité de la revue de code manuelle et ses limites&lt;/li>
&lt;li>La différence entre vulnérabilités et faiblesses&lt;/li>
&lt;li>Le fonctionnement interne des outils SAST&lt;/li>
&lt;li>L&amp;rsquo;analyse de teinte (taint analysis) et le suivi des flux de données&lt;/li>
&lt;li>Les méthodologies sink-to-source vs source-to-sink&lt;/li>
&lt;li>Les stratégies d&amp;rsquo;atténuation : liste blanche vs liste noire&lt;/li>
&lt;li>La gestion des faux positifs en pratique&lt;/li>
&lt;li>Le choix et le déploiement d&amp;rsquo;outils SAST à grande échelle&lt;/li>
&lt;li>La complémentarité entre tests manuels et automatisés&lt;/li>
&lt;/ul>
&lt;p>Il est 3 heures du matin. Vous en êtes à votre cinquième tasse de café, les yeux injectés de sang, fixant la ligne 2 847 d&amp;rsquo;une pull request de 10 000 lignes. Quelque part dans ce labyrinthe d&amp;rsquo;accolades et de points-virgules se cache une injection SQL qui pourrait faire tomber toute votre application. Bienvenue dans le monde glamour de la revue de code manuelle !&lt;/p></description></item><item><title>A propos</title><link>https://blog.rodolpheg.xyz/fr/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/about/</guid><description/></item><item><title>Archives</title><link>https://blog.rodolpheg.xyz/fr/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/archives/</guid><description/></item><item><title>CVE</title><link>https://blog.rodolpheg.xyz/fr/cves/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/cves/</guid><description/></item><item><title>Slides</title><link>https://blog.rodolpheg.xyz/fr/slides/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/slides/</guid><description/></item></channel></rss>