🔍 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 unpromptGenerationId - 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é XORMicrosoft_2023ou 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
containsHumanReferenceclasse 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.net— VT · URLhaus · ThreatFox - URLs :
https://appsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.net/v1/paint-cocreator/moderate-prompt— URLhaus - URLs :
https://appsaiservices-a0fqcjc6bzbhgdcd.b02.azurefd.net/v1/paint-cocreator/image-sign— URLhaus - 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/