OpenSSF malicious-packages를 독립 RAW 자산으로 전량 수집하고, 정정·삭제는 물리 삭제가 아니라 상태 전이로 다루는 증분 파이프라인
2026-06-15 전량 수집 / 896MB
pypi 11,340 · rubygems 970 · nuget 773 …
언어 레지스트리 전용, 배포판 멀웨어 피드 없음
인벤토리 매핑은 이후 레이어로 분리
| 영역 | 정체 | 용도 |
|---|---|---|
affected[] | 정규화된 결론 | 매핑/적재에 사용 |
…malicious-packages-origins | 출처·감사 추적 | 신뢰도(다중 출처)·증분 |
여러 피드(ghsa-malware, amazon-inspector …)가 같은 패키지를 신고해도 affected는 1개로 머지되고, 근거는 origins에 N개로 남는다.
| 형태 | 건수 | 비율 |
|---|---|---|
ranges만 (대개 introduced:0=전 버전) | 203,356 | 89.6% |
versions만 (특정 버전) | 16,704 | 7.4% |
| 둘 다 (일관됨) | 7,000 | 3.1% |
versions는 불연속이 많다(예: easyascii 2.4.1, 2.4.5, 3.2.1…). min~max로 합치면 정상 버전을 오탐 → 버전당 개별 처리.PoC: ~/labrador/tool/openssf-malicious/collect.py (raw 확보까지).
VULN_RANGE = | 구분 토큰(구간/단일버전)의 합집합
| OSV 입력 | 사내 표기 | 비고 |
|---|---|---|
introduced:0 | (,) | 89% |
introduced:X | [X,) | 1,709건 |
introduced:A+fixed:B | [A,B) | 33건 · 필수 |
introduced:A+last_affected:B | [A,B] | 128건 |
versions:[…] | v1|v2|v3 | 합치기 금지 |
| range 다중(한 product) | union 단순화 | 747건 |
ecosystem 정규화: Packagist→COMPOSER, crates.io→CARGO, Go→GOLANG … 대문자 코드. 케이싱은 UPPER() 흡수, vscode/git 스킵.
advisory 정정 시: MAL-xxxx가 처음 패키지 A → 재분석 후 패키지 B로 바뀜.
기준점 복구: prev 유효성 = merge-base --is-ancestor / 무효 시 commit_time 이하(≤) base / 최후엔 full reconcile(HEAD 트리 ↔ DB 활성 행 대조, 주기 self-heal).
DEPRECATED TINYINT — 0 = 활성, 1 = 폐기VIEW_COMP_LIB_MAL = SELECT … WHERE DEPRECATED=0PRODUCT_KEY 해시 해소 — AES-CBC(aesCbc.py, key=IV=NPMNPMNPMNPMNPMN)DEPRECATED 상태 전이를 소비하는 연동 방식정본: human/reports/2026-malicious-package-collection.md · 결정: ai/decisions/2026-06-15-malicious-package-openssf-collection.md