
Eine eingehende Analyse von CVE 2023 38408, einer kritischen OpenSSH-Schwachstelle, einschließlich technischem Hintergrund, Ausnutzung in kontrollierten Umgebungen und Gegenmaßnahmen.
Zweck dieses Berichts ist es, die CVE-2023-38408, eine kritische reale Schwachstelle in OpenSSH, sowohl durch theoretisches Verständnis als auch durch praktische Simulation zu analysieren. Der Bericht erläutert die technischen Grundlagen der Schwachstelle, zeigt, wie sie in kontrollierten Umgebungen ausgenutzt werden kann, und untersucht implementierte Abhilfemaßnahmen.
Das Verständnis realer Sicherheitslücken durch praktische Simulation hilft nicht nur, Systeme zu schützen, sondern schärft auch das Bewusstsein von Entwicklern und Systemadministratoren für potenzielle Angriffsvektoren. Die Analyse solcher Schwachstellen überbrückt die Kluft zwischen Theorie und praktischer Sicherheitsimplementierung.
CVE-2023-38408 ist eine Schwachstelle, die ssh-agent in OpenSSH betrifft, wenn die PKCS#11-Unterstützung aktiviert ist. Sie ermöglicht die Remote-Codeausführung auf einem Client-Rechner, wenn der Benutzer mit aktivierter Agent-Weiterleitung (ssh -A) eine Verbindung zu einem kompromittierten Server herstellt. Diese Schwachstelle hat schwerwiegende Auswirkungen auf jedes System, das für die sichere Authentifizierung auf OpenSSH angewiesen ist.
| CVE-Details | Informationen |
|---|---|
| CVE-ID | CVE-2023-38408 |
| CVSS-Score | 9.8 (Kritisch) |
| Betroffene Versionen | OpenSSH < 9.3p2 |
| Angriffsvektor | Netzwerk |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Erforderlich |
| Auswirkung | Vollständige Systemkompromittierung |
SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll, das für sichere Kommunikation über unsichere Netzwerke verwendet wird. Es bietet verschlüsselte Kanäle für Remote-Anmeldung, Befehlsausführung, Dateiübertragung und mehr.```mermaid graph LR A[SSH Client] -->|Encrypted Connection| B[SSH Server] A -->|Authentication| C[ssh-agent] C -->|Private Keys| D[Key Store] B -->|Agent Forwarding| E[Remote ssh-agent Proxy]
### 2.2 Was ist ssh-agent
`ssh-agent` ist ein Hintergrundprozess, der Ihre entschlüsselten privaten SSH-Schlüssel im Speicher ablegt, sodass Sie sie verwenden können, ohne bei jeder Verbindung zu einem entfernten System die Passphrase erneut eingeben zu müssen.
#### Agent-Weiterleitung (ssh -A)
Agent-Weiterleitung ermöglicht es einem entfernten System, auf Ihren lokalen `ssh-agent` über einen Unix-Domain-Socket zuzugreifen. Dies ist nützlich für die Verkettung von SSH-Verbindungen, birgt jedoch erhebliche Sicherheitsrisiken, wenn die entfernte Maschine kompromittiert ist.```mermaid
sequenceDiagram
participant Client as SSH Client
participant Agent as ssh-agent
participant Server as Remote Server
participant Proxy as Agent Proxy
Client->>Agent: Start agent
Client->>Server: ssh -A user@server
Server->>Proxy: Create proxy socket
Note over Server,Proxy: SSH_AUTH_SOCK=/tmp/ssh-xxx/agent.xxx
Server->>Proxy: ssh-add request
Proxy->>Client: Forward request
Client->>Agent: Process request
Agent->>Client: Response
Client->>Proxy: Forward response
Proxy->>Server: Final response
Technisch gesehen richtet der SSH-Client bei Verwendung von ssh -A einen Unix-Domain-Socket auf dem entfernten Server ein, der als Proxy zu Ihrem lokalen ssh-agent fungiert. Die Umgebungsvariable SSH_AUTH_SOCK wird so gesetzt, dass sie auf diesen Proxy-Socket verweist. Alle Aufrufe von SSH_AUTH_SOCK auf dem entfernten Server werden über die SSH-Verbindung zurückgeleitet und von Ihrem lokalen ssh-agent verarbeitet.
PKCS#11 ist eine Standard-API für die Interaktion mit kryptografischen Token wie Smartcards, YubiKeys oder virtuellen Hardware-Sicherheitsmodulen (HSMs).
| PKCS#11-Funktion | Zweck | Risikostufe |
|---|---|---|
C_Initialize() | Initialisiert die Bibliothek | Niedrig |
C_GetSlotList() | Listet verfügbare Steckplätze auf | Niedrig |
C_FindObjects() | Findet kryptografische Objekte | Mittel |
C_Sign() | Signiert Daten | Hoch |
dlopen() | Lädt gemeinsam genutzte Bibliothek | Kritisch |
OpenSSHs ssh-agent unterstützt das Laden von PKCS#11-Providern (gemeinsam genutzte .so-Bibliotheken) mit dem Befehl ssh-add -s /path/to/provider.so. Diese Bibliotheken ermöglichen es dem Agenten, mit sicheren Hardware- oder Softwaremodulen zu interagieren, um private Schlüssel zu verwenden, ohne sie direkt offenzulegen.
Im Hintergrund führt ssh-add -s Folgendes aus:
.so-Datei wird mit dlopen() dynamisch in den Speicher geladen.C_Initialize(), C_GetSlotList(), C_FindObjects() und C_Sign() über die PKCS#11-API auf und ruft sie auf.| Attribut | Details |
|---|---|
| ID | CVE-2023-38408 |
| Schweregrad | Hoch (CVSS 9.8) |
| Zeitleiste | Offengelegt Juli 2023, behoben in OpenSSH 9.3p2 |
| Betroffene Software | OpenSSH-Versionen vor 9.3p2 mit PKCS#11-Unterstützung |
| Angriffskomplexität | Niedrig |
| Angriffsvektor | Netzwerk über SSH-Agent-Weiterleitung |
Die Schwachstelle rührt daher, dass ssh-agent jede über ssh-add -s bereitgestellte gemeinsam genutzte Objektdatei (.so) lädt, ohne zu überprüfen, ob es sich um einen legitimen PKCS#11-Anbieter handelt.```mermaid
graph TD
A[Attacker sends ssh-add -s malicious.so] --> B[Request forwarded to victim's ssh-agent]
B --> C[ssh-agent calls dlopen on malicious.so]
C --> D[Constructor function executes immediately]
D --> E[Arbitrary code runs on victim machine]
### 3.3 Angriffsablaufanalyse```mermaid
sequenceDiagram
participant V as Victim
participant A as Attacker
participant Agent as ssh-agent
participant Lib as Malicious .so
V->>A: ssh -A attacker@host
Note over V,A: Agent forwarding enabled
A->>Agent: ssh-add -s /path/to/malicious.so
Agent->>Lib: dlopen("/path/to/malicious.so")
Note over Lib: Constructor executes
Lib->>V: Malicious code runs
Note over V: System compromised
Auf der untersten Ebene umfasst die Abfolge der Ereignisse: