<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Debug - Catégorie - arleo.eu</title>
        <link>https://www.arleo.eu/categories/debug/</link>
        <description>Debug - Catégorie - arleo.eu</description>
        <generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Mon, 25 May 2026 20:51:17 &#43;0200</lastBuildDate><atom:link href="https://www.arleo.eu/categories/debug/" rel="self" type="application/rss+xml" /><item>
    <title>Postmortem — CrowdSec AppSec : faux positif heuristique sur Sonarr/Radarr</title>
    <link>https://www.arleo.eu/posts/postmortem-crowdsec-appsec-false-positive-sonarr/</link>
    <pubDate>Mon, 25 May 2026 20:51:17 &#43;0200</pubDate>
    <author>Jmr</author>
    <guid>https://www.arleo.eu/posts/postmortem-crowdsec-appsec-false-positive-sonarr/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/images/postmortem-crowdsec-appsec-false-positive-sonarr-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="résumé">Résumé</h2>
<p>Le <strong>25 mai 2026 vers 22h02 (heure locale)</strong>, Sonarr et Radarr sont devenus totalement inaccessibles depuis l&rsquo;IP maison (<code>82.XX.XX.XX</code>), retournant <strong>403</strong> sur toutes les URLs y compris <code>/login</code>. Le service était pourtant opérationnel. Le diagnostic initial suspectait les récents déploiements du refactor <code>crowdsec-cf-sync</code> — la cause réelle est un <strong>faux positif heuristique CrowdSec AppSec</strong>.</p>
<hr>
<h2 id="timeline">Timeline</h2>
<table>
  <thead>
      <tr>
          <th>Heure (locale)</th>
          <th>Événement</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>~22h00</td>
          <td>Cookie de session Sonarr expiré côté navigateur</td>
      </tr>
      <tr>
          <td>22h02:31</td>
          <td>Le navigateur charge la bibliothèque Sonarr → tente de charger 20+ <code>/MediaCover/*.jpg</code> simultanément</td>
      </tr>
      <tr>
          <td>22h02:31</td>
          <td>Sonarr retourne 302 → <code>/login</code> pour chaque image (session invalide)</td>
      </tr>
      <tr>
          <td>22h02:34</td>
          <td>La connexion SignalR WebSocket s&rsquo;établit (101) via <code>access_token</code> dans l&rsquo;URL</td>
      </tr>
      <tr>
          <td>~22h05</td>
          <td>CrowdSec AppSec déclenche la règle heuristique <code>http-probing</code> : rafale de requêtes échouées depuis la même IP</td>
      </tr>
      <tr>
          <td>22h11:37</td>
          <td>Toutes les requêtes de <code>82.XX.XX.XX</code> retournent 403 — <code>cs_reason=heuristic</code> dans les logs nginx</td>
      </tr>
      <tr>
          <td>22h13:34</td>
          <td>Même <code>/login</code> bloqué — l&rsquo;IP ne peut plus s&rsquo;authentifier</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="cause-racine">Cause racine</h2>
<p>CrowdSec AppSec maintient un <strong>état heuristique en mémoire</strong>, distinct des décisions LAPI. Lorsque le navigateur tente de charger simultanément de nombreuses ressources et reçoit des 302/403 de l&rsquo;application upstream (Sonarr), AppSec interprète cette rafale d&rsquo;échecs comme du sondage agressif (<code>http-probing</code>) et bloque l&rsquo;IP source.</p>]]></description>
</item>
<item>
    <title>Postmortem : TypeIt cassé par Mermaid dans le thème LoveIt</title>
    <link>https://www.arleo.eu/posts/postmortem-typeit-mermaid/</link>
    <pubDate>Thu, 14 May 2026 09:44:43 &#43;0200</pubDate>
    <author>Jmr</author>
    <guid>https://www.arleo.eu/posts/postmortem-typeit-mermaid/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/images/postmortem-typeit-mermaid-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="tldr">TL;DR</h2>
<p>L&rsquo;animation typewriter du thème LoveIt (TypeIt) ne fonctionnait plus sur la home après l&rsquo;ajout de diagrammes Mermaid dans les posts. Cause : un sélecteur DOM <code>#id-1</code> partagé entre les deux librairies. Quand Mermaid trouve un bloc orphelin dans un résumé de home, son initialisation crash, et la chaîne d&rsquo;init JS s&rsquo;arrête avant d&rsquo;atteindre TypeIt. Fix : ajouter `</p>]]></description>
</item>
</channel>
</rss>
