Unvollständige Dokumentation der Programmausführung
Beschreibung
Unvollständige Dokumentation der Programmausführung tritt auf, wenn die Dokumentation eines Produkts nicht alle Mechanismen umfassend beschreibt, die steuern oder beeinflussen, wie Programme ausgeführt werden. Dies umfasst fehlende Dokumentation für Umgebungsvariablen, Konfigurationsdateien, Registry-Schlüssel, Kommandozeilenschalter, Systemeinstellungen, Startparameter und andere ausführungsbeeinflussende Faktoren. Ohne vollständige Ausführungsdokumentation können Administratoren und Sicherheitspersonal das System nicht ordnungsgemäß konfigurieren, sichern oder auditieren.
Risiko
Unvollständige Programmausführungsdokumentation hat indirekte Sicherheitsimplikationen. Versteckte Konfigurationsoptionen können Sicherheitsimplikationen haben, die nicht verstanden werden. Umgebungsvariablen, die das Sicherheitsverhalten beeinflussen, werden möglicherweise nicht ordnungsgemäß gesetzt. Kommandozeilenoptionen, die Sicherheitskontrollen umgehen, werden möglicherweise nicht dokumentiert. Undokumentierte Ausführungsmodi können unterschiedliche Sicherheitseigenschaften haben. Angreifer könnten undokumentierte Ausführungskontrollen vor Verteidigern entdecken. Incident Response wird ohne Kenntnis aller Ausführungsfaktoren behindert. Sicherheitshärtungsrichtlinien können ohne diese Informationen nicht vollständig sein.
Lösung
Dokumentieren Sie alle Umgebungsvariablen, die das Programmverhalten beeinflussen. Dokumentieren Sie alle Konfigurationsdateien, ihre Speicherorte und ihre Optionen. Dokumentieren Sie alle Kommandozeilenschalter und ihre Sicherheitsimplikationen. Dokumentieren Sie Startsequenzen und Initialisierungsprozeduren. Dokumentieren Sie alle externen Faktoren, die die Ausführung beeinflussen. Fügen Sie Sicherheitsimplikationen für jede Ausführungskontrolle hinzu. Pflegen Sie die Dokumentation, wenn neue Ausführungskontrollen hinzugefügt werden. Testen Sie, dass dokumentierte Ausführungskontrollen wie beschrieben funktionieren.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Sonstiges | Bereich: Sonstiges Reduzierte Wartbarkeit - System kann nicht ordnungsgemäß gewartet oder konfiguriert werden. |
| Sonstiges | Bereich: Sonstiges Erhöhte Analysekomplexität - Sicherheitsanalyse kann undokumentierte Ausführungsfaktoren nicht abdecken. |
| Vertraulichkeit | Bereich: Vertraulichkeit Informationsoffenlegung - Undokumentierte Debug-Modi können sensible Informationen preisgeben. |
Beispielcode und Lösung
Verwundbarer Code
// Verwundbar: Programm mit undokumentierten Ausführungskontrollen
// DATEI: main.py
// Keine Dokumentation für:
// - Umgebungsvariablen, die das Verhalten beeinflussen
// - Versteckte Kommandozeilenoptionen
// - Debug-Modi
// - Konfigurationsdatei-Speicherorte
import os
import sys
def main():
# Undokumentiert: DEBUG-Umgebungsvariable
if os.environ.get('DEBUG'):
enable_debug_mode() # Loggt sensible Daten, deaktiviert Auth!
# Undokumentiert: SKIP_AUTH-Umgebungsvariable
if os.environ.get('SKIP_AUTH'):
bypass_authentication() # Sicherheitsumgehung!
# Undokumentiert: --insecure Kommandozeilen-Flag
if '--insecure' in sys.argv:
disable_tls_verification() # Man-in-the-Middle-Schwachstelle!
# Undokumentiert: alternative Konfigurationsdatei-Speicherorte
config_paths = [
os.environ.get('CONFIG_FILE'), # Undokumentiert
'/etc/app/config.yaml',
'~/.app/config.yaml',
'./config.yaml', # Könnte angreiferkontrolliert sein!
]
for path in config_paths:
if path and os.path.exists(path):
load_config(path)
break
// DATEI: server.py
// Fehlende Dokumentation für Server-Ausführungsoptionen
class Server:
def __init__(self):
# Undokumentiert: BIND_ALL-Umgebungsvariable
if os.environ.get('BIND_ALL'):
self.host = '0.0.0.0' # Bindet an alle Interfaces!
else:
self.host = '127.0.0.1'
# Undokumentiert: --no-rate-limit Flag
if '--no-rate-limit' in sys.argv:
self.rate_limiting = False # DoS-Schwachstelle!
# Undokumentiert: LOG_PASSWORDS für "Debugging"
if os.environ.get('LOG_PASSWORDS'):
self.log_passwords = True # Massives Sicherheitsproblem!
// DATEI: config_loader.py
// Keine Dokumentation über Config-Priorität und Sicherheitsimplikationen
def load_all_configs():
"""
Lädt Konfiguration mit undokumentierter Priorität:
1. Kommandozeilenargumente (überschreiben alles)
2. Umgebungsvariablen
3. Benutzerkonfigurationsdatei (~/.apprc) # Undokumentiert!
4. Systemkonfiguration (/etc/app.conf)
5. Eingebaute Standards
Undokumentiert: Umgebungsvariablen können Sicherheitsfeatures deaktivieren!
"""
pass
Sichere Lösung
// Sicher: Vollständige Dokumentation der Programmausführung
/*
* ============================================================================
* PROGRAMMAUSFÜHRUNGS-DOKUMENTATION
* ============================================================================
*
* Dieses Dokument beschreibt ALLE Mechanismen, die die Programmausführung steuern.
*
* 1. UMGEBUNGSVARIABLEN
* =====================
*
* Variable | Typ | Standard | Beschreibung
* ------------------|---------|----------|----------------------------------
* APP_CONFIG_PATH | Pfad | (keiner) | Override für Konfigurationsdatei-Speicherort
* APP_LOG_LEVEL | String | "INFO" | Logging-Verbosität (DEBUG,INFO,WARN,ERROR)
* APP_PORT | Integer | 8080 | Server-Listening-Port
* APP_HOST | String | "127.0.0.1" | Server-Bind-Adresse
* APP_TLS_CERT | Pfad | (keiner) | TLS-Zertifikatspfad
* APP_TLS_KEY | Pfad | (keiner) | TLS-Privatschlüsselpfad
*
* Sicherheitssensible Umgebungsvariablen:
* ---------------------------------------
* Diese Variablen beeinflussen die Sicherheit und sollten sorgfältig kontrolliert werden:
*
* APP_DEBUG | Boolean | false | Debug-Modus aktivieren
* | | | WARNUNG: Logs können sensible Daten enthalten
* | | | NIEMALS in Produktion aktivieren!
*
* APP_INSECURE_DEV | Boolean | false | Sicherheitsprüfungen deaktivieren (nur Entwicklung)
* | | | WARNUNG: Umgeht Authentifizierung vollständig
* | | | NIEMALS in Produktion setzen!
*
* 2. KOMMANDOZEILENOPTIONEN
* =========================
*
* Verwendung: app [optionen]
*
* Allgemeine Optionen:
* -c, --config PFAD Konfigurationsdateipfad (Standard: /etc/app/config.yaml)
* -p, --port PORT Server-Port (Standard: 8080)
* -h, --help Diese Hilfemeldung anzeigen
* -v, --version Versionsinformationen anzeigen
*
* Sicherheitsoptionen:
* --tls-cert PFAD Pfad zum TLS-Zertifikat (erforderlich für HTTPS)
* --tls-key PFAD Pfad zum TLS-Privatschlüssel (erforderlich für HTTPS)
* --require-auth Authentifizierung für alle Endpunkte erforderlich (Standard: true)
*
* Entwicklungsoptionen (NICHT IN PRODUKTION VERWENDEN):
* --debug Debug-Modus aktivieren (ausführliches Logging, kann Geheimnisse preisgeben)
* --no-tls-verify TLS-Zertifikatverifizierung deaktivieren (UNSICHER)
* --skip-auth Authentifizierung überspringen (KOMPLETT UNSICHER)
*
* 3. KONFIGURATIONSDATEIEN
* ========================
*
* Konfigurationsdateien werden in folgender Reihenfolge geladen (später überschreibt früher):
*
* 1. /etc/app/defaults.yaml - Systemstandards (nur-lesbar)
* 2. /etc/app/config.yaml - Systemkonfiguration (admin-kontrolliert)
* 3. ~/.config/app/config.yaml - Benutzerkonfiguration (benutzer-kontrolliert)
* 4. ./config.yaml - Lokales Override (SICHERHEITSWARNUNG: Siehe unten)
* 5. $APP_CONFIG_PATH - Umgebungs-Override
* 6. Kommandozeilenargumente - Höchste Priorität
*
* SICHERHEITSWARNUNG: Lokale Konfigurationsdatei (./config.yaml):
* - Diese Datei wird aus dem aktuellen Arbeitsverzeichnis geladen
* - Ein Angreifer mit Schreibzugriff auf das CWD könnte bösartige Config injizieren
* - Für sicherheitssensible Deployments aus geschütztem Verzeichnis ausführen
* - Oder --no-local-config verwenden, um dieses Verhalten zu deaktivieren
*
* 4. INITIALISIERUNGSSEQUENZ
* ==========================
*
* 1. Kommandozeilenargumente parsen
* 2. Umgebungsvariablen laden
* 3. Konfigurationsdateien laden (in Prioritätsreihenfolge)
* 4. Logging initialisieren (Sicherheitsereignisse werden immer geloggt)
* 5. Konfiguration validieren
* 6. Sicherheitsmodule initialisieren
* 7. Server starten
*
* 5. ZUSAMMENFASSUNG DER SICHERHEITSIMPLIKATIONEN
* ================================================
*
* Feature | Risikostufe | Hinweise
* ---------------------|-------------|----------------------------------
* Debug-Modus | HOCH | Kann Geheimnisse loggen, Sicherheit deaktivieren
* --skip-auth | KRITISCH | Umgeht Authentifizierung vollständig
* --no-tls-verify | HOCH | Ermöglicht MITM-Angriffe
* Lokale Config-Datei | MITTEL | Kann angreiferkontrolliert sein
* APP_INSECURE_DEV | KRITISCH | Deaktiviert alle Sicherheitsprüfungen
*
*/
// Implementierung folgt dokumentiertem Verhalten
import os
import sys
import argparse
from typing import Optional
# Dokumentierte Konfigurationsklasse
class AppConfig:
"""
Anwendungskonfiguration mit vollständig dokumentierten Ausführungskontrollen.
Siehe: docs/EXECUTION.md für vollständige Dokumentation aller Optionen.
Attributes:
config_path: Pfad zur Konfigurationsdatei
port: Server-Listening-Port (1-65535)
host: Server-Bind-Adresse
debug: Debug-Modus (WARNUNG: Sicherheitsimplikationen - siehe Doku)
tls_cert: Pfad zum TLS-Zertifikat
tls_key: Pfad zum TLS-Privatschlüssel
require_auth: Ob Authentifizierung erforderlich ist
"""
# Dokumentierte Umgebungsvariablen-Namen
ENV_CONFIG_PATH = 'APP_CONFIG_PATH'
ENV_LOG_LEVEL = 'APP_LOG_LEVEL'
ENV_PORT = 'APP_PORT'
ENV_HOST = 'APP_HOST'
ENV_DEBUG = 'APP_DEBUG' # SICHERHEIT: Siehe Dokumentation
def __init__(self):
self.config_path: Optional[str] = None
self.port: int = 8080
self.host: str = '127.0.0.1'
self.debug: bool = False
self.tls_cert: Optional[str] = None
self.tls_key: Optional[str] = None
self.require_auth: bool = True
@classmethod
def from_environment(cls) -> 'AppConfig':
"""
Konfiguration aus Umgebungsvariablen laden.
Dokumentierte Umgebungsvariablen:
- APP_CONFIG_PATH: Override für Konfigurationsdatei-Speicherort
- APP_LOG_LEVEL: Logging-Verbosität
- APP_PORT: Server-Port
- APP_HOST: Bind-Adresse
- APP_DEBUG: Debug-Modus aktivieren (SICHERHEITSWARNUNG)
Returns:
AppConfig-Instanz mit angewendeten Umgebungswerten
"""
config = cls()
config.config_path = os.environ.get(cls.ENV_CONFIG_PATH)
config.port = int(os.environ.get(cls.ENV_PORT, '8080'))
config.host = os.environ.get(cls.ENV_HOST, '127.0.0.1')
config.debug = os.environ.get(cls.ENV_DEBUG, '').lower() == 'true'
if config.debug:
import warnings
warnings.warn(
"Debug-Modus über APP_DEBUG aktiviert. "
"Dies kann sensible Daten loggen. "
"Nicht in Produktion verwenden!",
SecurityWarning
)
return config
def create_argument_parser() -> argparse.ArgumentParser:
"""
Argument-Parser mit vollständig dokumentierten Optionen erstellen.
Alle Optionen sind im Hilfetext und in EXECUTION.md dokumentiert.
"""
parser = argparse.ArgumentParser(
description='Anwendungsserver',
epilog='Siehe docs/EXECUTION.md für vollständige Dokumentation'
)
parser.add_argument(
'-c', '--config',
help='Konfigurationsdateipfad (Standard: /etc/app/config.yaml)'
)
parser.add_argument(
'-p', '--port',
type=int,
default=8080,
help='Server-Port (Standard: 8080)'
)
parser.add_argument(
'--debug',
action='store_true',
help='Debug-Modus aktivieren. SICHERHEITSWARNUNG: Kann sensible Daten loggen!'
)
parser.add_argument(
'--skip-auth',
action='store_true',
help='Authentifizierung überspringen. SICHERHEITSWARNUNG: Komplett unsicher! '
'Nur für lokale Entwicklung verwenden.'
)
return parser
CVE-Beispiele
Diese CWE ist als VERBOTEN für direkte CVE-Zuordnung markiert, da sie ein Dokumentationsqualitätsproblem und keine direkte Sicherheitslücke darstellt.
Verwandte CWEs
- CWE-1059: Unzureichende technische Dokumentation (Eltern)
- CWE-1225: Dokumentationsprobleme (Kategoriemitglied)
- CWE-1110: Unvollständige Design-Dokumentation (verwandt)
- CWE-1111: Unvollständige I/O-Dokumentation (verwandt)
Referenzen
- MITRE Corporation. "CWE-1112: Incomplete Documentation of Program Execution." https://cwe.mitre.org/data/definitions/1112.html