<?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>Fri, 12 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.rodolpheg.xyz/fr/index.xml" rel="self" type="application/rss+xml"/><item><title>Pourquoi j'ai voulu mon propre outil d'audit de code</title><link>https://blog.rodolpheg.xyz/fr/posts/pourquoi-mon-propre-outil-audit-de-code/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/pourquoi-mon-propre-outil-audit-de-code/</guid><description>&lt;blockquote>
&lt;p>Petite note : cet article est moins technique que d&amp;rsquo;habitude. J&amp;rsquo;avais juste envie de raconter, à cœur ouvert, le développement de l&amp;rsquo;outil sur lequel je bosse, et surtout mon ressenti tout au long du dev.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="le-constat--trois-ans-de-sast">Le constat : trois ans de SAST&lt;/h2>
&lt;p>Ça va faire plus de trois ans que je fais du DevSecOps. Dans ce métier, je manipule pas mal de SAST, et globalement je les trouve un peu nuls. Ils sortent les vulns les plus évidentes, oui, mais dès que ça devient un peu tordu, c&amp;rsquo;est vraiment pas dingue.&lt;/p></description></item><item><title>Mon premier bug bounty : une DOM XSS</title><link>https://blog.rodolpheg.xyz/fr/posts/dom-xss-postmessage-bug-bounty/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/posts/dom-xss-postmessage-bug-bounty/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Note de divulgation&lt;/strong> : Le périmètre, le nom du programme et l&amp;rsquo;identité de la société sont masqués conformément à la politique de divulgation responsable. Tous les extraits de code sont anonymisés ou reconstruits pour illustrer le concept. La vulnérabilité a été signalée via une plateforme de bug bounty et a depuis été corrigée.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;ul>
&lt;li>XSS basé sur le DOM trouvé dans une page &lt;code>/apps/returns&lt;/code> d&amp;rsquo;une grande marque e-commerce&lt;/li>
&lt;li>Cause racine : &lt;code>window.location.href = event.data.data&lt;/code> - sans vérification d&amp;rsquo;origine, sans validation de schéma&lt;/li>
&lt;li>Vecteur d&amp;rsquo;attaque : n&amp;rsquo;importe quelle fenêtre cross-origin tenant une référence via &lt;code>window.open()&lt;/code> peut injecter une URI &lt;code>javascript:&lt;/code>&lt;/li>
&lt;li>Impact : exécution JavaScript complète dans l&amp;rsquo;origine cible → cookies de session, localStorage, appels API same-origin, prise de contrôle de compte&lt;/li>
&lt;li>CVSS 9.0 (S:C - changement de portée)&lt;/li>
&lt;li>Bonus : découverte d&amp;rsquo;une chaîne de destruction d&amp;rsquo;adresses sans protection CSRF en explorant l&amp;rsquo;impact&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="comment-tout-a-commencé">Comment tout a commencé&lt;/h2>
&lt;p>Je chassais des bugs sur une grande marque de cosmétiques e-commerce tournant sous Shopify. Rien de sophistiqué - juste lire le source des pages, grep sur des patterns intéressants, chercher ce truc qu&amp;rsquo;on a oublié de valider.&lt;/p></description></item><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>Liens</title><link>https://blog.rodolpheg.xyz/fr/links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/fr/links/</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>