🇰🇷 한글 설명
Filecoin Pin의 업로드 GitHub Action은 1.1.0 이전 버전에서 포크 PR 감지를 event.pull_request만으로 수행합니다. 두 개의 워크플로우 패턴(fork PR 워크플로우 → workflow_run 워크플로우)에서는 workflow_run 이벤트에 event.pull_request가 없어 포크 여부 검사가 우회되며, 외부 기여자의 산출물이 저장소 소유자의 Filecoin 지갑으로 업로드될 수 있습니다.
💡 쉬운 설명
외부 사람이 만든 파일이 저장소 주인의 Filecoin 지갑 비용으로 몰래 업로드될 수 있는 취약점입니다. 지갑 개인키가 유출되지는 않지만 저장 비용과 데이터 오염 피해가 발생합니다.
🇺🇸 원문 (English)
Filecoin Pin is an IPFS Pinning Service API implementation that pins to Filecoin's PDP service. Prior to 1.1.0, the upload GitHub Action's fork detection in `upload-action/src/build.js` checks only `event.pull_request`. In the documented two-workflow pattern, an untrusted fork pull-request workflow produces an artifact and a privileged `workflow_run` workflow downloads and uploads it. Because `workflow_run` has no `event.pull_request`, `isForkPR` becomes false and `uploadStatus` becomes `pending-upload`. The action later resolves `workflow_run.pull_requests` without repeating the fork check before initializing the wallet with `walletPrivateKey` and uploading the artifact. An external contributor can therefore cause attacker-controlled artifacts to be stored using the repository owner's Filecoin wallet, incurring unauthorized storage expenditure, dataset pollution and consumption of configured wallet funds. Disclosure of the wallet private key is not required. The 0.x action line is not receiving a backport and must be migrated to a fixed 1.x release. This issue is fixed in version 1.1.0.
📍 영향받는 시스템
Filecoin Pin upload GitHub Action 1.1.0 미만 버전 (0.x 라인 포함)
⚔️ 공격 벡터
외부 기여자가 포크 PR로 악성 아티팩트를 생성하고, 특권 workflow_run 워크플로우가 이를 다운로드·업로드하도록 유도
🛡️ 대응 방법
Filecoin Pin upload action을 1.1.0 이상(1.x)으로 업그레이드하고, 0.x 버전 사용을 중단
🔧 검증 코드
결과가 출력되면 0.x 버전의 해당 액션을 사용 중이므로 1.1.0 이상으로 마이그레이션이 필요하며, 아무것도 출력되지 않으면 해당 0.x 사용이 없는 것입니다.
grep -rE 'filecoin-project/.*upload.*@v?0\.' .github/workflows/ 2>/dev/null