BM: Baca dalam Bahasa Melayu
World C4: Pipeline Shields
The tj-actions story
You will learn: how moved tags leaked secrets from thousands of pipelines in March 2025.
Checked with GitHub Actions 2026-10 on 31 Oct 2026
The problem
You use a popular action at @v45. You never touch that line. Can the code it runs still change?
Pick one answer.
Watch
Tap each point on the timeline.
Tap through a real attack. Thousands of pipelines ran bad code. Nobody had changed their own workflow file.
Watch
Tap the log line that still leaks a secret.
0 of 1 found
GitHub hides an exact secret as ***. The bad code changed each secret first: encoded twice. Changed text slips past. On public repos, anyone could read these logs. (This log is an example.)
Try it
Put the attack in order. First step at the top.
First step at the top. Put these in order. Use the arrows, or drag.
- Pipelines run
@v45and get the bad commit - The bad code prints secrets into the log
- They move the version tags to a bad commit
- Anyone reads the public logs
- The attacker gets write access to the action's repo
Try it
Tags follow whoever moves them. A full commit SHA cannot move.
Tap every line that ran the bad code on 14 March.
0 of 2 found
Hint
Exact-looking tags are still tags.Predict
Your public repo ran it on 14 March. What do you do first?
Pick one answer.
Check
What should every team learn from this? Swipe each lesson.
Swipe right for good, left for needs work. Or use the buttons.
Pin third-party actions to a full commit SHA
You did it!
You can now explain how moved tags leaked secrets from thousands of pipelines.
Go deeper (optional)
A few days before, reviewdog/action-setup was hacked too. Researchers think the two attacks are linked. Note: a SHA pin only helps if it points at a good commit. Pinning the bad commit itself would not help. Read the GitHub advisory and Semgrep’s write-up (links below).
Bahasa Melayu
Anda guna action popular pada @v45. Anda tak pernah sentuh baris itu. Boleh kod yang ia jalankan masih berubah?
Tekan setiap titik serangan sebenar ini. Beribu pipeline jalankan kod jahat. Tiada siapa ubah fail workflow mereka sendiri.
GitHub sembunyikan secret yang tepat sebagai ***. Kod jahat ubah setiap secret dulu: dikod dua kali. Teks yang berubah terlepas. Dalam repo awam, sesiapa boleh baca log ini. (Log ini contoh.)
Susun serangan ini ikut urutan. Langkah pertama di atas.
Tag ikut sesiapa yang mengalihnya. SHA commit penuh tak boleh dialih.
Repo awam anda jalankannya pada 14 Mac. Apa anda buat dulu?
Apa setiap pasukan patut belajar daripada ini? Leret setiap pengajaran.
Kini anda boleh terangkan bagaimana tag yang dialih membocorkan secret dari beribu pipeline.
You finished this before. Practice is always welcome!
Official docs: GitHub advisory GHSA-mrrh-fwg8-r2c3 (CVE-2025-30066) · Semgrep: tj-actions/changed-files is compromised · Secure use: using third-party actions
You've learned for 25 minutes. A short break helps your brain.
Sprint done! Great focus. Stretch for a minute?