flawopen.com/Incidents/xz-utils-backdoor-march-2024
Kompromi rantai pasok XZ Utils (CVE-2024-3094)
CVE-2024-3094 memengaruhi tarball XZ Utils 5.6.0/5.6.1. Dampak bergantung pada build distribusi; identifikasi dan ganti paket terdampak.[1], [3], [4], [5], [6]
Anggap repositori sumber sebagai resep yang terbuka dan arsip rilis sebagai kotak bahan yang disegel. Walaupun resepnya terlihat benar, dapur tetap memeriksa segel dan daftar kiriman; nama masakan yang sama pada kotak tidak cukup untuk langsung memasukkannya ke proses produksi. Manifest yang diautentikasi melalui kanal tepercaya terpisah dapat mendeteksi kotak yang ditukar, tetapi tanda tangan vendor yang valid pun tidak membuktikan bahwa kotak resmi yang disahkan itu aman: kotak XZ yang dikompromikan adalah rilis resmi. Ganti paket terdampak sesuai panduan distribusi; gunakan pemeriksaan manifest hanya sebagai kontrol terpisah terhadap penggantian artefak.[5], [6]
Konsep Kunci & Istilah
Arsip rilis- Arsip kode sumber yang diterbitkan untuk instalasi atau pembuatan paket. Karena dapat berbeda dari berkas yang diambil dari repositori, arsip ini harus diverifikasi sebagai artefak tersendiri.[3], [4], [6]
Provenans build- Bukti yang mencatat sumber yang telah ditinjau, langkah build, dan penerbit suatu artefak. Catatan ini membantu tim menentukan apakah hasil unduhan layak dipercaya.[5], [6]
Verifikasi artefak- Membandingkan hash atau tanda tangan artefak dengan nilai yang diharapkan dan diperoleh melalui saluran tepercaya yang terpisah sebelum artefak dipakai untuk build atau rilis.
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-506
Kronologi Insiden
Andres Freund melaporkan masalah tersebut secara publik.[5]
Alur Serangan Langkah demi Langkah
Anomali memulai penyelidikan
Andres Freund melaporkan penggunaan CPU yang tidak biasa dan kesalahan Valgrind pada proses SSH. Sinyal yang dapat diamati itu memicu penyelidikan dan pengungkapan publik.[5]
Respons dimulai dengan penggantian dan verifikasi
Perlakukan ini sebagai insiden paket terdampak dan provenance build. Ikuti panduan distribusi dan ganti paket yang terdampak. Untuk artefak berikutnya, verifikasi provenance dan tanda tangannya: langkah ini dapat mendeteksi penggantian, tetapi tidak membuktikan bahwa rilis resmi yang disahkan itu aman.[1], [6]
Kode Sumber: Rentan vs Aman
# Menerima input build yang diunduh tanpa membuktikan identitasnya.
from pathlib import Path
def stage_release(artifact: Path, build_inputs: Path) -> None:
build_inputs.joinpath(artifact.name).write_bytes(artifact.read_bytes())
# Salinan yang berhasil tidak membuktikan bahwa arsip ini sesuai
# dengan rilis yang ditinjau atau manifes tepercaya.# Gerbang pembelajaran: verifikasi SHA-256 yang diharapkan dari manifes tepercaya.
import hashlib
import hmac
from pathlib import Path
def verify_release(artifact: Path, expected_sha256: str) -> None:
digest = hashlib.sha256(artifact.read_bytes()).hexdigest()
if not hmac.compare_digest(digest, expected_sha256.lower()):
raise ValueError("Artefak rilis tidak cocok dengan manifes tepercaya")
# Dapatkan expected_sha256 dari jalur publikasi yang diautentikasi terpisah,
# lalu panggil verify_release sebelum memakai arsip sebagai input build.
# Ini mendeteksi penggantian, bukan rilis resmi yang berbahaya; ikuti panduan vendor untuk paket terdampak.Daftar Periksa Penguatan Sistem Rekayasa
- ✓Cocokkan arsip rilis yang diunduh dengan hash atau tanda tangan yang didapat lewat saluran terautentikasi terpisah; keberhasilan unduhan bukan bukti asal-usul.[1], [6]
- ✓Catat revisi sumber, lingkungan build, dan hash artefak untuk build yang dapat direproduksi; bandingkan hasil build independen saat memperbarui dependensi penting.
- ✓Tinjau skrip build, aturan pemaketan, dan artefak pengujian dengan ketelitian yang sama seperti kode aplikasi; catat asal dan integritas data uji biner yang tidak dapat dijelaskan.
- ✓Wajibkan persetujuan setidaknya dua pemelihara untuk perubahan alat rilis, konfigurasi CI, dan langkah pemaketan serta simpan catatan yang dapat ditelusuri.[5], [6]
- ✓Pastikan paket dan versi yang benar-benar terdampak melalui pemberitahuan vendor dan distribusi; verifikasi ulang asal-usul setelah paket diganti.
- ✓Masukkan penggunaan CPU yang tidak dapat dijelaskan, penurunan kinerja, dan kesalahan pemeriksaan memori ke prosedur investigasi, lalu simpan bukti yang dapat ditinjau.[5]
Sumber
- NVD — CVE-2024-3094
- MITRE CWE-506
- Rilis XZ Utils 5.6.0 — 24 Februari 2024
- Rilis XZ Utils 5.6.1 — 9 Maret 2024
- Andres Freund: laporan asli di oss-security
- Proyek XZ: pernyataan insiden — arsip oss-security
- Shai-Hulud: worm npm yang menerbitkan dirinya sendiri
- SUNBURST: ketika alur build itu sendiri menjadi kerentanan
- Catatan CVE Program — data CNA Red Hat