Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

BUG: XSSOutputScorer misses SVG and JavaScript data URIs

Fermée
#3,399 0 commentaires 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

@Kaap10 y travaille déjà.

Depuis le 22/10/2026.

  • #3400 par @Kaap10 — fusionnée

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
python
Domaine
ai, security

Piste de recherche

Find the XSSOutputScorer implementation and its tests; the issue does not name their paths. Start by tracing the existing data:text/html URI patterns and the reproductions in the issue. Done when SVG and JavaScript data URIs score True in both cases described; linked pull request #3400 is already open.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Describe the bug

XSSOutputScorer detects cross-site scripting (XSS) payloads in LLM responses (mapping to OWASP LLM02: Insecure Output Handling). While it detects inline <script>, event handlers, and data:text/html URIs, its data URI patterns are hardcoded exclusively to text/html:

  1. SVG Data URIs (data:image/svg+xml):
    SVG markup can execute arbitrary JavaScript via embedded <script> tags or event handlers (onload=alert(1)). When embedded in markdown images (![alt](data:image/svg+xml,<svg onload=alert(1)>)), HTML <img src="data:image/svg+xml;base64,...">, or <object data="data:image/svg+xml,...">, these zero-click vectors score as False.

  2. JavaScript Data URIs (data:text/javascript, data:application/javascript):
    Direct script execution via data URIs (e.g. <script src="data:text/javascript,alert(1)"> or markdown links [click](data:text/javascript,...)) bypasses data:text/html and scores as False.

Steps/Code to Reproduce
import asyncio
from pyrit.score import XSSOutputScorer

async def main():
    scorer = XSSOutputScorer()

    # SVG data URI with onload:
    score1 = (await scorer.score_text_async('<img src="data:image/svg+xml;base64,PHN2ZyBvbmxvYWQ9YWxlcnQoMSk+">'))[0]
    print("SVG data URI detected:", score1.get_value())

    # Script data URI:
    score2 = (await scorer.score_text_async('<script src="data:text/javascript,alert(1)"></script>'))[0]
    print("Script data URI detected:", score2.get_value())

asyncio.run(main())
Expected Results

Both XSS data URIs should be recognized as executable content and score as True.

Actual Results

Both payloads score as False.

Langage dominant
Python
Étoiles
4.7k
Forks
980
Merge moyen
2 j 9 h
PR mergées (30 j)
422

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/PyRIT

Toutes les issues de microsoft/PyRIT

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.