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

AuswirkungDetails
SonstigesBereich: Sonstiges

Reduzierte Wartbarkeit - System kann nicht ordnungsgemäß gewartet oder konfiguriert werden.
SonstigesBereich: Sonstiges

Erhöhte Analysekomplexität - Sicherheitsanalyse kann undokumentierte Ausführungsfaktoren nicht abdecken.
VertraulichkeitBereich: 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

  1. MITRE Corporation. "CWE-1112: Incomplete Documentation of Program Execution." https://cwe.mitre.org/data/definitions/1112.html