Klartext-Übertragung sensibler Informationen
Beschreibung
Klartext-Übertragung sensibler Informationen tritt auf, wenn Software sensible oder sicherheitskritische Daten im Klartext über einen Kommunikationskanal überträgt, der von unbefugten Akteuren abgefangen werden kann. Dies umfasst das Senden von Passwörtern, Session-Tokens, persönlichen Informationen, Finanzdaten oder API-Schlüsseln über unverschlüsselte HTTP-Verbindungen, unverschlüsselte Protokolle (FTP, Telnet, SMTP ohne TLS) oder schlecht konfigurierte Netzwerkverbindungen. Wenn Daten ohne Verschlüsselung übertragen werden, kann jeder, der in der Lage ist, den Netzwerkverkehr zu beobachten – durch Netzwerk-Sniffing, Man-in-the-Middle-Angriffe oder kompromittierte Netzwerkinfrastruktur – die übertragenen Informationen erfassen und lesen.
Risiko
Klartext-Übertragung setzt alle Daten während der Übertragung der Abhörung aus. Session-Sidejacking-Angriffe erfassen unverschlüsselte Session-Tokens, wodurch Angreifer authentifizierte Sitzungen kapern können. IBM DevOps Deploy (CVE-2025-13489) übertrug sensible Daten im Klartext, was Man-in-the-Middle-Angriffe ermöglichte. Schneider Electric-Produkte (CVE-2025-1060) legten Daten durch unverschlüsselte Netzwerkkommunikation offen. Im Klartext übertragene Passwörter ermöglichen sofortige Kontoübernahme. Das Abfangen von Finanzdaten erleichtert Betrug. In geteilten Netzwerken (WiFi, Unternehmens-LANs) können Angreifer passiv den gesamten unverschlüsselten Verkehr erfassen. Diese Schwachstelle ermöglicht sowohl passives Abhören als auch aktive Man-in-the-Middle-Angriffe.
Lösung
Übertragen Sie sensible Daten immer über verschlüsselte Kanäle. Verwenden Sie HTTPS mit TLS 1.2+ für Webverkehr. Implementieren Sie HSTS, um Protokoll-Downgrade-Angriffe zu verhindern. Konfigurieren Sie E-Mail-Server mit STARTTLS oder implizitem TLS. Ersetzen Sie Legacy-Protokolle (FTP, Telnet) durch sichere Alternativen (SFTP, SSH). Verwenden Sie TLS für Datenbankverbindungen. Verschlüsseln Sie API-Kommunikation. Implementieren Sie Certificate Pinning für mobile Anwendungen. Konfigurieren Sie sichere WebSocket-Verbindungen (WSS). Prüfen Sie Netzwerkkommunikation auf Klartext-Übertragung. Verwenden Sie VPNs für internen Netzwerkverkehr, wenn angemessen.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Vertraulichkeit | Umfang: Datenabfangen Alle übertragenen sensiblen Daten können von Netzwerkbeobachtern erfasst und gelesen werden. |
| Authentifizierung | Umfang: Session-Hijacking Abgefangene Anmeldedaten und Session-Tokens ermöglichen Kontoübernahme und Identitätsdiebstahl. |
| Integrität | Umfang: Datenmanipulation Man-in-the-Middle-Angreifer können Daten während der Übertragung modifizieren, wenn keine Verschlüsselung Integritätsschutz bietet. |
Beispielcode + Korrigierter Code
Anfälliger Code
# ANFÄLLIG: HTTP statt HTTPS
import requests
def login(username, password):
# Anmeldedaten im Klartext über HTTP gesendet!
response = requests.post('http://api.example.com/login',
data={'username': username, 'password': password})
return response.json()
# ANFÄLLIG: Unverschlüsselte Datenbankverbindung
import psycopg2
conn = psycopg2.connect(
host='database.example.com',
database='mydb',
user='admin',
password='secret' # Kein SSL - Anmeldedaten im Klartext gesendet!
)
// ANFÄLLIG: HTTP-URL für sensible Operationen
import java.net.HttpURLConnection;
import java.net.URL;
public class PaymentService {
public void processPayment(String cardNumber, String cvv) throws Exception {
// Zahlungsdaten über unverschlüsseltes HTTP gesendet!
URL url = new URL("http://payment.example.com/process");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
String data = "card=" + cardNumber + "&cvv=" + cvv;
conn.getOutputStream().write(data.getBytes());
}
}
// ANFÄLLIG: WebSocket ohne Verschlüsselung
const socket = new WebSocket('ws://chat.example.com/messages');
socket.onopen = function() {
// Nachrichten im Klartext gesendet!
socket.send(JSON.stringify({
type: 'auth',
token: authToken
}));
};
// ANFÄLLIG: Formular ohne HTTPS
<form action="http://example.com/login" method="POST">
<input type="password" name="password">
<button type="submit">Login</button>
</form>
Korrigierter Code
# SICHER: HTTPS mit Zertifikatsverifizierung
import requests
import ssl
import psycopg2
def login_safe(username, password):
# Anmeldedaten mit TLS verschlüsselt
response = requests.post('https://api.example.com/login',
data={'username': username, 'password': password},
verify=True) # Zertifikat verifizieren (Standard)
return response.json()
# SICHER: Verschlüsselte Datenbankverbindung mit SSL
conn = psycopg2.connect(
host='database.example.com',
database='mydb',
user='admin',
password='secret',
sslmode='verify-full', # SSL erforderlich und Zertifikat verifizieren
sslrootcert='/path/to/ca-certificate.crt'
)
# SICHER: SMTP mit TLS
import smtplib
from email.message import EmailMessage
def send_email_safe(to, subject, body):
msg = EmailMessage()
msg['Subject'] = subject
msg['To'] = to
msg.set_content(body)
# TLS-Verschlüsselung verwenden
with smtplib.SMTP_SSL('smtp.example.com', 465) as server:
server.login('user', 'password') # Verschlüsselte Verbindung
server.send_message(msg)
// SICHER: HTTPS mit ordnungsgemäßer Zertifikatsvalidierung
import javax.net.ssl.HttpsURLConnection;
import java.net.URL;
public class PaymentService {
public void processPayment(String cardNumber, String cvv) throws Exception {
// Zahlungsdaten mit TLS verschlüsselt
URL url = new URL("https://payment.example.com/process");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
// Zusätzliche Sicherheitsheader
conn.setRequestProperty("Strict-Transport-Security", "max-age=31536000");
String data = "card=" + cardNumber + "&cvv=" + cvv;
conn.getOutputStream().write(data.getBytes());
}
}
// SICHER: HTTPS in Spring Boot erzwingen
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requiresChannel()
.anyRequest()
.requiresSecure(); // HTTPS erzwingen
http.headers()
.httpStrictTransportSecurity()
.includeSubDomains(true)
.maxAgeInSeconds(31536000);
}
}
// SICHER: Sicherer WebSocket (WSS)
const socket = new WebSocket('wss://chat.example.com/messages');
socket.onopen = function() {
// Nachrichten mit TLS verschlüsselt
socket.send(JSON.stringify({
type: 'auth',
token: authToken
}));
};
// SICHER: HTTPS in Express.js erzwingen
const express = require('express');
const helmet = require('helmet');
const app = express();
// HSTS aktivieren
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
// HTTP auf HTTPS umleiten
app.use((req, res, next) => {
if (req.header('x-forwarded-proto') !== 'https') {
res.redirect(`https://${req.header('host')}${req.url}`);
} else {
next();
}
});
Ausgenutzt in der Praxis
IBM DevOps Deploy (IBM, 2025)
CVE-2025-13489 in IBM DevOps Deploy ermöglichte es Angreifern, sensible Daten durch Man-in-the-Middle-Techniken abzufangen, aufgrund der Klartext-Übertragung, mit CVSS 5.9 bewertet.
Schneider Electric Industriesysteme (Schneider Electric, 2025)
CVE-2025-1060 in Schneider Electric-Produkten legte Daten offen, wenn Netzwerkverkehr abgehört wurde, aufgrund der Klartext-Übertragung sensibler Informationen.
Firesheep WiFi Session-Hijacking (Mehrere, 2010-Heute)
Die Firesheep-Browser-Erweiterung demonstrierte Massen-Session-Hijacking in offenen WiFi-Netzwerken durch Erfassung unverschlüsselter Session-Cookies, was zur weitverbreiteten Einführung von HTTPS führte.
Tools zum Testen/Ausnutzen
-
Wireshark — Netzwerkprotokoll-Analysator zur Erfassung von Klartext-Verkehr.
-
mitmproxy — Abfangen und Untersuchen von HTTP/HTTPS-Verkehr.
-
Ettercap — Man-in-the-Middle-Angriffs-Framework.
CVE-Beispiele
-
CVE-2025-13489 — IBM DevOps Deploy Klartext-Übertragung.
-
CVE-2025-1060 — Schneider Electric Klartext-Datenoffenlegung.
-
CVE-2019-1010260 — ktlint Klartext-Übertragung von Anmeldedaten.
Referenzen
-
MITRE. "CWE-319: Cleartext Transmission of Sensitive Information." https://cwe.mitre.org/data/definitions/319.html
-
OWASP. "Transport Layer Protection Cheat Sheet." https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Protection_Cheat_Sheet.html