BUG: UrlConverter preserves forward slashes by default, preventing path payload evasion
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 25/100
Piste de recherche
Start by locating UrlConverter and its tests, then check how it calls urllib.parse.quote and how converter options are exposed. The issue includes a reproducer and expected output: forward slashes should encode as %2F by default, while callers can configure safe. An open pull request is already linked, so check its status before starting.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
UrlConverter encodes text prompts to URL-encoded representations for red teaming and evasion testing. Currently, it delegates directly to urllib.parse.quote(prompt) without constructor configuration.
Because Python's standard library urllib.parse.quote(string, safe='/') defaults to safe='/':
- Path traversal payloads (
../../etc/passwd) encode to../../etc/passwdwith all path slashes preserved literally. - SSRF and open redirect payloads (
https://attacker.com/steal) encode tohttps%3A//attacker.com/steal, preserving all slashes.
In adversarial evaluations and WAF evasion testing, red-teamers specifically encode forward slashes as %2F to bypass path normalization and WAF rules. Because UrlConverter exposes no parameters and hardcodes the stdlib default, callers cannot produce %2F without an explicit safe configuration parameter.
Steps/Code to Reproduce
import asyncio
from pyrit.converter import UrlConverter
async def main():
converter = UrlConverter()
result = await converter.convert_async(prompt="../../etc/passwd")
print("Encoded payload:", result.output_text)
print("Contains literal slash:", "/" in result.output_text)
asyncio.run(main())
Expected Results
Path traversal payloads should have forward slashes encoded as %2F by default (..%2F..%2Fetc%2Fpasswd), and callers should be able to configure safe characters if they wish to preserve specific characters (e.g. UrlConverter(safe="/")).
Actual Results
Encoded payload: ../../etc/passwd
Contains literal slash: True
- Langage dominant
- Python
- Étoiles
- 4.7k
- Forks
- 1k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 484
Préparer son environnement
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/PyRIT
-
Scenario objective previews can split supplementary Unicode during truncationPeut-être pris @Aadithya-kl l’a pris il y a 1 jour. OuverteBug: triage help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
microsoft/PyRIT#3870 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
URLDataTypeSerializer treats mixed-case HTTP(S) schemes as local pathsPeut-être pris @akhil9tiet l’a pris il y a 1 jour. OuverteBug: triage help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
microsoft/PyRIT#3861 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
Parameter required status is lost after wire round-tripPeut-être pris @its-amann l’a pris il y a 1 jour. OuverteBug: triage help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
microsoft/PyRIT#3854 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
BUG: LLMGenericTextConverter identifier changes between processes for set-valued template parametersPeut-être pris @samrudhi03 l’a pris il y a 1 jour. OuverteBug: triage
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
microsoft/PyRIT#3841 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
BUG: SelfAskGeneral scorers leave their output keys out of the identifierPeut-être pris @Hrushikesh-ramilla l’a pris il y a 3 jours. OuverteBug: triage
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de microsoft/PyRIT
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
cline/mcp-marketplace#3576 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
griptape-ai/griptape-nodes-library-elevenlabs#30 ·
Les mainteneurs répondent en général sous 1 jour
-
docs: Release playbookOuvertedocumentation
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
awslabs/social-messaging-agent-runtime-toolkit#140 ·
Les mainteneurs répondent en général sous 1 jour
-
subtask
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
fga-eps-mds/2026.2-MeasureSoftGram-DOC#187 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
NSPG13/agent-bounties#1747 ·
Les mainteneurs répondent en général sous 1 jour