<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>CSS Injection on CyberVeille</title>
    <link>https://cyberveille.ch/tags/css-injection/</link>
    <description>Recent content in CSS Injection on CyberVeille</description>
    <generator>Hugo -- 0.146.0</generator>
    <language>fr-fr</language>
    <copyright>Cyberveille CC BY-NC-SA 4.0</copyright>
    <lastBuildDate>Mon, 10 Aug 2026 00:00:00 +0200</lastBuildDate>
    <atom:link href="https://cyberveille.ch/tags/css-injection/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>CSS dans les webmails : exfiltration de tokens, keyloggers et prise de contrôle de comptes</title>
      <link>https://cyberveille.ch/posts/2026-08-10-css-dans-les-webmails-exfiltration-de-tokens-keyloggers-et-prise-de-controle-de-comptes/</link>
      <pubDate>Mon, 10 Aug 2026 00:00:00 +0200</pubDate>
      <guid>https://cyberveille.ch/posts/2026-08-10-css-dans-les-webmails-exfiltration-de-tokens-keyloggers-et-prise-de-controle-de-comptes/</guid>
      <description>&lt;h2 id=&#34;-contexte&#34;&gt;🔍 Contexte&lt;/h2&gt;
&lt;p&gt;Publié le 6 août 2026 par Gareth Heyes (PortSwigger Research), cet article de recherche technique présente une série de techniques d&amp;rsquo;attaque exploitant le rendu CSS dans les clients webmail. Les cibles étudiées incluent &lt;strong&gt;Yahoo Mail, AOL Mail, Fastmail, ProtonMail, Gmail et Outlook&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;-techniques-dattaque-principales&#34;&gt;🎯 Techniques d&amp;rsquo;attaque principales&lt;/h2&gt;
&lt;h3 id=&#34;abus-des-éléments-htmlcss-autorisés&#34;&gt;Abus des éléments HTML/CSS autorisés&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Détournement de balises &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt;&lt;/strong&gt; : les attributs &lt;code&gt;for&lt;/code&gt; permettent de déclencher des actions UI arbitraires (ex: épingler un message dans Outlook, ouvrir le ruban). Vulnérabilité non corrigée par Microsoft.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Injection de prompt indirect via CSS&lt;/strong&gt; : utilisation des pseudo-éléments &lt;code&gt;:before&lt;/code&gt;/&lt;code&gt;:after&lt;/code&gt; pour masquer du texte aux victimes humaines tout en le rendant visible aux LLM (navigateur IA &lt;strong&gt;OpenAI Atlas&lt;/strong&gt;), permettant l&amp;rsquo;exfiltration du nom de la victime via des onglets ouverts automatiquement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;exfiltration-de-tokens-par-css&#34;&gt;Exfiltration de tokens par CSS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Race condition lors du collage dans un brouillon&lt;/strong&gt; (AOL Mail, Yahoo Mail) : du HTML/CSS malveillant dans le presse-papiers est injecté sans sanitization correcte sous Firefox.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vol de token Medium (12 caractères hex)&lt;/strong&gt; : via des sélecteurs d&amp;rsquo;attributs CSS imbriqués (&lt;code&gt;^=&lt;/code&gt;, &lt;code&gt;*=&lt;/code&gt;, &lt;code&gt;$=&lt;/code&gt;) et du CSS nesting pour réduire la taille du payload. Technique permettant de reconstituer le token complet côté serveur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exfiltration sans requêtes externes (CSP strict)&lt;/strong&gt; : utilisation d&amp;rsquo;oracles de hauteur de police (&lt;code&gt;@font-face&lt;/code&gt; + &lt;code&gt;descent-override&lt;/code&gt;), d&amp;rsquo;animations CSS et de la propriété &lt;code&gt;inset&lt;/code&gt; pour forcer un clic sur un lien encodant les digits du token.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;contournements-de-proxy-dimage&#34;&gt;Contournements de proxy d&amp;rsquo;image&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fastmail&lt;/strong&gt; : &lt;code&gt;content:url(/\5c/user.fm/...)&lt;/code&gt; — le sanitizer croit que l&amp;rsquo;URL est relative, le navigateur résout vers &lt;code&gt;user.fm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ProtonMail&lt;/strong&gt; : imbrication de &lt;code&gt;Url(&lt;/code&gt; dans un commentaire CSS pour tromper le sanitizer et exposer l&amp;rsquo;IP de la victime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gmail&lt;/strong&gt; : &lt;code&gt;background:image-set(var(--x,&#39;//02.rs&#39;))&lt;/code&gt; — le fallback de variable CSS contourne la sanitization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;mutation-css-fastmail&#34;&gt;Mutation CSS (Fastmail)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mutation via CSSOM&lt;/strong&gt; : les noms de keyframes et media queries contenant des escapes hex (&lt;code&gt;\7d\2a&lt;/code&gt;) sont décodés par Chrome lors de la lecture CSSOM, produisant des sélecteurs arbitraires (&lt;code&gt;}*{color:red}&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Deux bugs corrigés par Fastmail, chacun récompensé par &lt;strong&gt;1000$ de bounty&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;css-gadgets-outlook&#34;&gt;CSS Gadgets (Outlook)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gadgets CSS&lt;/strong&gt; : des attributs &lt;code&gt;data-*&lt;/code&gt; autorisés par le sanitizer déclenchent une manipulation DOM par une bibliothèque JS tierce, injectant &lt;code&gt;position:fixed&lt;/code&gt; hors de la liste blanche.&lt;/li&gt;
&lt;li&gt;Permet de &lt;strong&gt;déface Outlook&lt;/strong&gt; et de sortir des limites du message.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;css-hotwiring-fastmail&#34;&gt;CSS Hotwiring (Fastmail)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Technique permettant de &lt;strong&gt;forcer un clic sur une action UI spécifique&lt;/strong&gt; (ex: marquer comme VIP) lorsque la victime clique n&amp;rsquo;importe où sur la page, via &lt;code&gt;:before&lt;/code&gt;/&lt;code&gt;:after&lt;/code&gt; avec &lt;code&gt;position:fixed&lt;/code&gt; et &lt;code&gt;z-index&lt;/code&gt; élevé.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;keylogger-css-outlook&#34;&gt;Keylogger CSS (Outlook)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keylogger via &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; et sélecteurs CSS&lt;/strong&gt; (&lt;code&gt;option+option:checked&lt;/code&gt;, &lt;code&gt;:has()&lt;/code&gt;, &lt;code&gt;:checked&lt;/code&gt;) combiné au gadget CSS &lt;code&gt;position:fixed&lt;/code&gt; pour spoofier l&amp;rsquo;écran de connexion Outlook.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keylogger temps réel (Firefox)&lt;/strong&gt; : exploitation d&amp;rsquo;un comportement Firefox qui réinitialise le timer du &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; lors d&amp;rsquo;un déplacement hors écran via animation CSS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass du sanitizer Outlook&lt;/strong&gt; : injection via &lt;code&gt;@media --narrow-window;/*&amp;quot;*/.xyz{position:fixed}&lt;/code&gt; — le sanitizer traite le sélecteur comme faisant partie de la media query.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;exfiltration-via-prompt-injection--gmail-bypass-coworkslack&#34;&gt;Exfiltration via prompt injection + Gmail bypass (Cowork/Slack)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Collaboration avec Pete Hendy : email piégé convainquant l&amp;rsquo;IA &lt;strong&gt;Cowork&lt;/strong&gt; (connecteur Gmail) de créer un brouillon contenant du CSS exfiltrant un &lt;strong&gt;token Slack&lt;/strong&gt; via le bypass Gmail (&lt;code&gt;image-set(var(...))&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-attaques-futures-décrites&#34;&gt;🔮 Attaques futures décrites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keylogger HTML-only&lt;/strong&gt; (Chrome) : via l&amp;rsquo;élément &lt;code&gt;&amp;lt;selectedcontent&amp;gt;&lt;/code&gt; et images lazy-loaded.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keylogger temps réel Chrome&lt;/strong&gt; : via l&amp;rsquo;attribut &lt;code&gt;interestfor&lt;/code&gt; (interest invokers) pour chaîner des &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; popovers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-type-darticle&#34;&gt;📋 Type d&amp;rsquo;article&lt;/h2&gt;
&lt;p&gt;Publication de recherche offensive détaillée, présentant des techniques CTI exploitables contre des webmails grand public et des clients IA, avec preuves de concept et code source disponible sur GitHub.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
