BUG: CodeChameleonConverter custom functions do not reach its identifier

オープン
#3,761 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 2 日以内に返信

@Ayoubhm07 がすでに取り組んでいます。

2026年11月2日 から。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
38/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
python
領域
security

調査の方向性

Read codechameleon_converter.py, especially _build_identifier and the custom encryption/decryption handling at the referenced lines. Review the two strict xfail tests proposed in #3477 and settle whether identity should come from a caller-provided stable identifier or a fingerprint of the effective functions and rendered decrypt source. Done means converters using different custom functions have distinct identifiers, with tests covering the chosen behavior.

索引モデルが issue の本文から書いたものです。

説明

Bug: triage
Describe the bug

With encrypt_type="custom", CodeChameleonConverter._build_identifier records only encrypt_type (codechameleon_converter.py:113). The encryption function decides the encoded prompt, and the decryption function's source is rendered into the prompt the model sees (source read at :150, rendered at :140-142), so converters built with different functions share one hash. As discussed in #3477, a qualified name is not enough either: two functions can share it with different code, closures or configuration.

Steps/Code to Reproduce

Run on main at 791e12c6e. Save as a file, since inspect.getsource needs one.

import asyncio

from pyrit.converter import CodeChameleonConverter
from pyrit.setup import IN_MEMORY, initialize_pyrit_async


def reverse_text(text):
    return text[::-1]


def upper_text(text):
    return text.upper()


async def main() -> None:
    await initialize_pyrit_async(memory_db_type=IN_MEMORY, silent=True)
    for function in (reverse_text, upper_text):
        converter = CodeChameleonConverter(encrypt_type="custom", encrypt_function=function, decrypt_function=function)
        result = await converter.convert_async(prompt="hello world")
        line = next(line for line in result.output_text.splitlines() if "need to solve" in line)
        print(line.strip(), converter.get_identifier().unique_name)


asyncio.run(main())
Expected Results

Different functions, different identifiers.

Actual Results
The encrypted_problem you need to solve is: dlrow olleh CodeChameleonConverter::505647f9
The encrypted_problem you need to solve is: HELLO WORLD CodeChameleonConverter::505647f9
Versions
  • OS: Windows 11
  • Python version: 3.12.0
  • PyRIT version: source checkout of main at 791e12c6e
System:
    python: 3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
executable: C:\dev\pyr-main\Scripts\python.exe
   machine: Windows-11-10.0.26300-SP0

Python dependencies:
        pyrit: 1.2.0.dev0
       Cython: None
        numpy: 2.4.6
       openai: 2.54.0
    packaging: 26.3
          pip: 23.2.1
        scipy: 1.17.1
   setuptools: 84.2.1
      sqlite3: None
        torch: None
 transformers: 5.20.2

Possible directions from #3477: a stable identifier passed by the caller, or a fingerprint of the effective function and rendered decrypt source. The test proposed in #3477 marks both settings as strict xfail linked to this issue. I can take this one once the direction is settled.

主要言語
Python
スター
4.7k
フォーク
1k
平均マージ
2日 2時間
マージ済み PR(30日)
439

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/PyRIT のほかの issue

microsoft/PyRIT の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。