🔍 Contexte

Article publié le 21 août 2026 sur le blog de recherche xusheng.dev. Il s’agit d’une publication de recherche en rétro-ingénierie portant sur les applications Microsoft Paint et Photos sous Windows, dans le cadre des fonctionnalités d’IA générative d’image (Cocreator, Image Creator).

🧩 Découverte principale

L’analyse révèle que Paint et Photos embarquent un filigrane invisible dans chaque image générée par IA, même lorsque la génération est locale (NPU sur Copilot+ PC). Ce filigrane est un GUID de 16 octets émis par un serveur Microsoft distant lors de la modération du prompt.

🔄 Flux technique détaillé

  • Le prompt utilisateur est envoyé en HTTPS POST à l’endpoint distant : https://appsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.net/v1/paint-cocreator/moderate-prompt
  • Le serveur retourne un watermarkId (GUID) et un promptGenerationId
  • Le GUID watermarkId est encodé dans les pixels de l’image via Watermarker.dll!WmkWriteWatermark
  • L’algorithme est de type SVD/block-domain adaptatif (constantes 24.0, 0.25, 0.5, 0.2), modifiant 193 376 pixels sur 262 144 dans un test 512×512
  • Le message embarqué est : 0x4c || GUID[0..15] || checksum_byte (18 octets / 144 bits)
  • Chaque bit doit être placé au moins 3 fois ; si la capacité est insuffisante, la génération échoue

📦 Composants identifiés

  • Watermarker.dll (1,67 MB) : encodage du filigrane invisible
  • AIServices.dll : modération du prompt et parsing de la réponse serveur
  • PaintAIManager.dll : orchestration
  • ProvenanceHelper.dll / provenancesdk.dll : gestion des métadonnées C2PA
  • Modèles ONNX chiffrés : seg.onnxe, inseg_enc.onnxe, inseg_dec.onnxe, mager.onnxe (clé XOR Microsoft_2023 ou clé alphanumérique 4096 octets)

🔐 Lien avec C2PA

Le même watermarkId est inscrit dans le manifeste C2PA signé cryptographiquement (chunk caBX dans les PNG), sous l’assertion c2pa.soft-binding avec l’algorithme com.microsoft.invismark.1. Les formats de sauvegarde autorisés (PNG, JPEG, GIF, .paint) sont limités à ceux compatibles C2PA ; le format BMP est exclu.

⚠️ Points de sécurité et vie privée

  • Les prompts successifs sont liés explicitement via lastPromptGenerationId
  • Le champ containsHumanReference classe côté serveur si le prompt réfère à un humain
  • Un contournement potentiel est évoqué : appeler l’API cloud directement pourrait retourner une image sans filigrane ni C2PA
  • Microsoft ne divulgue pas explicitement l’existence du GUID de filigrane invisible ni son association avec la modération du prompt
  • Lien possible avec l’Article 50 de l’AI Act européen (entré en vigueur le 2 août 2026)

📰 Nature de l’article

Publication de recherche technique en rétro-ingénierie, visant à documenter et analyser un mécanisme de traçabilité non divulgué dans des applications Windows grand public.

🧠 TTPs et IOCs détectés

IOC

  • Domaines : appsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.netVT · URLhaus · ThreatFox
  • URLs : https://appsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.net/v1/paint-cocreator/moderate-promptURLhaus
  • URLs : https://appsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.net/v1/paint-cocreator/image-signURLhaus
  • Fichiers : Watermarker.dll
  • Fichiers : AIServices.dll
  • Fichiers : PaintAIManager.dll
  • Fichiers : ProvenanceHelper.dll
  • Fichiers : provenancesdk.dll
  • Fichiers : segapi.dll
  • Fichiers : seg.onnxe
  • Fichiers : inseg_enc.onnxe
  • Fichiers : inseg_dec.onnxe
  • Fichiers : mager.onnxe
  • Chemins : C:\Program Files\WindowsApps\Microsoft.Paint_11.2605.71.0_x64__8wekyb3d8bbwe
  • Chemins : C:\Program Files\WindowsApps\Microsoft.Windows.Photos_2026.11060.2004.0_x64__8wekyb3d8bbwe\Watermarker.dll

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 27 août 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.


🟡 Indice de vérification factuelle : 35/100 (moyenne)

  • ⬜ xusheng.dev — source non référencée (0pts)
  • ✅ 25539 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 15 IOCs (IPs/domaines/CVEs) (10pts)
  • ⬜ 0/3 IOCs confirmés externellement (0pts)
  • ⬜ aucune TTP identifiée (0pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

🔗 Source originale : https://xusheng.dev/posts/reversing/mspaint_invisible_watermark/main/