BUG: ManyShotJailbreakAttack accepts a negative example_count and drops examples from the end
Maintainer antworten meist innerhalb von 2 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- python
- Bereich
- security, testing-qa
Rechercherichtung
Start at ManyShotJailbreakAttack.validate_constructor_parameters and the construction path described in the issue; check how the REST TechniqueService.create_async path uses that validation. Add coverage for non-positive, boolean, and non-integer example_count values at construction and validation, then confirm invalid values raise a ValueError naming example_count. An open linked pull request (#3395) indicates work is already underway.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
ManyShotJailbreakAttack uses example_count as a slice bound (examples[:example_count]), but validate_constructor_parameters only rejects 0. A negative count is accepted and silently drops examples from the end of the list instead of selecting from the start, so example_count=-1 with the bundled dataset sends 399 examples, and with five custom examples -1 keeps four and -4 keeps one. True is accepted as 1, and non-integers fail with an unrelated error (2.5 raises TypeError: slice indices must be integers..., -5 with five examples raises the misleading Many shot examples must be provided.).
Because the check sits in validate_constructor_parameters, the REST technique API (TechniqueService.create_async) also accepts {"example_count": -1} and stores a technique that later runs with the wrong number of examples. The neighbouring bounds in that API (max_attempts_on_failure, max_turns, tree_depth, chunk_size, ...) are all rejected up front.
Steps/Code to Reproduce
import asyncio
from unittest.mock import MagicMock
from pyrit.executor.attack import ManyShotJailbreakAttack
from pyrit.prompt_target import PromptTarget
from pyrit.setup import IN_MEMORY, initialize_pyrit_async
asyncio.run(initialize_pyrit_async(memory_db_type=IN_MEMORY))
target = MagicMock(spec=PromptTarget)
examples = [{"user": f"q{i}", "assistant": f"a{i}"} for i in range(5)]
for count in (-1, -4, True):
attack = ManyShotJailbreakAttack(objective_target=target, example_count=count, many_shot_examples=examples)
print(count, len(attack._examples))
print(len(ManyShotJailbreakAttack(objective_target=target, example_count=-1)._examples))
Expected Results
example_count values that are not positive integers raise a ValueError naming example_count, both at construction and in validate_constructor_parameters.
Actual Results
-1 4
-4 1
True 1
399
Screenshots
N/A
Versions
- OS: Windows 11
- Python version: 3.11.9
- PyRIT version: installed from main (1979257a) in editable mode
- Vorherrschende Sprache
- Python
- Sterne
- 4.7k
- Forks
- 1k
- Ø Merge
- 2 T. 2 Std.
- Gemergte PRs (30 T.)
- 439
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus microsoft/PyRIT
-
Description-only preset edits split comma-containing exact goals into separate goalsEvtl. vergeben @MRX-72 hat das vor 1 Tag übernommen. Offenhelp wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 2 Tagen
-
GUI rejects valid empty-string SearchReplaceConverter settings, preventing deletion convertersEvtl. vergeben @Darshika140 hat das vor 1 Tag übernommen. Offenhelp wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
microsoft/PyRIT#3749 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
HTML scenario export replaces an intentionally empty converted message with the original textEvtl. vergeben @VISHNU0906 hat das vor 1 Tag übernommen. Offenhelp wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
microsoft/PyRIT#3741 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Development toolchain includes an audited vulnerable Zod versionEvtl. vergeben @ppcvote hat das heute übernommen. Offenhelp wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
microsoft/PyRIT#3725 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in microsoft/PyRIT
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Nixtla/mlforecast#823 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
microsoft/ML-For-Beginners#1061 ·
-
bot-found documentation priority: P3
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
madenvel/KalinkaPlayer#503 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 63/100
EleutherAI/lm-evaluation-harness#4508 ·
Maintainer antworten meist innerhalb von 1 Tag