Unsachgemäßer Schutz für ausgehende Fehlermeldungen und Warnsignale

Beschreibung

Unsachgemäßer Schutz für ausgehende Fehlermeldungen und Warnsignale tritt auf, wenn nicht vertrauenswürdige Agenten Warnungen über Signalzustände, die Grenzwerte überschreiten, oder den Reaktionsmechanismus, der solche Warnungen verarbeitet, deaktivieren können. Hardware-Geräte verlassen sich auf Sensoren, um Betriebszustände außerhalb der Grenzen zu erkennen und Warnsignale auszulösen, die Abhilfemaßnahmen wie Abschaltung oder Drosselung einleiten. Wenn diesen schützenden Warnungen ordnungsgemäße Sicherheitskontrollen fehlen, kann bösartige Software sie maskieren oder deaktivieren, was insbesondere thermische und Leistungsverwaltungssysteme betrifft.

Risiko

Unsachgemäßer Warnungsschutz hat schwerwiegende Auswirkungen. Thermische Warnungen deaktiviert, was Überhitzung verursacht. Leistungswarnungen maskiert, was Schäden ermöglicht. Schutzabschaltungen verhindert. Hardwareschäden möglich. Denial of Service durch induzierte Ausfälle. Systeminstabilität. Sicherheitsmechanismen besiegt. Komponentenlebensdauer reduziert. Physischer Geräteschäden. Hohe Wahrscheinlichkeit wenn Warnungskonfigurationen für nicht vertrauenswürdige Software zugänglich sind.

Lösung

Warnsignale, die durch kritische Ereignisse erzeugt werden, sollten während der Architektur- und Entwurfsphase vor Zugriff durch nicht vertrauenswürdige Agenten geschützt werden. Nur Hardware oder vertrauenswürdige Firmware-Module sollten die Warnungskonfiguration ändern können. Implementieren Sie Zugriffskontrolle auf GPIO- und Interrupt-Konfigurationsregister. Sperren Sie Warnschwellenwerte nach sicherer Initialisierung. Verwenden Sie Hardware-Durchsetzung von Warnreaktionen, die von Software nicht überschrieben werden können.

Häufige Auswirkungen

AuswirkungDetails
VerfügbarkeitBereich: Verfügbarkeit

Systeminstabilität, Abstürze und Denial-of-Service durch deaktivierte Schutzwarnungen.
IntegritätBereich: Integrität

Sicherheitsmechanismen kompromittiert, die Betrieb außerhalb sicherer Parameter ermöglichen.

Beispielcode und Lösung

Verwundbarer Code

// VERWUNDBAR: Thermischer Warn-Controller ohne Zugriffsschutz

module vulnerable_thermal_alert (
    input  wire        clk,
    input  wire        rst_n,
    input  wire [11:0] temperature,
    input  wire        config_write_en,
    input  wire [11:0] config_threshold,
    input  wire        config_alert_enable,
    input  wire [1:0]  config_gpio_mask,
    output reg         alert_out,
    output reg         shutdown_request,
    output reg  [1:0]  gpio_alert
);

    reg [11:0] threshold_reg;
    reg        alert_enabled;
    reg [1:0]  gpio_mask;

    // VERWUNDBAR: Jede Software kann Warnungskonfiguration ändern
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            threshold_reg <= 12'hFFF;
            alert_enabled <= 1'b1;
            gpio_mask <= 2'b11;
        end else if (config_write_en) begin
            // VERWUNDBAR: Keine Zugriffskontrolle
            threshold_reg <= config_threshold;
            alert_enabled <= config_alert_enable;
            gpio_mask <= config_gpio_mask;
        end
    end

    wire over_temp = (temperature > threshold_reg);

    always @(posedge clk) begin
        // VERWUNDBAR: Warnung kann von nicht vertrauenswürdiger Software deaktiviert werden
        if (over_temp && alert_enabled) begin
            alert_out <= 1'b1;
            shutdown_request <= 1'b1;
            gpio_alert <= gpio_mask;
        end else begin
            alert_out <= 1'b0;
            shutdown_request <= 1'b0;
            gpio_alert <= 2'b00;
        end
    end

endmodule

Sichere Lösung

// SICHER: Thermischer Warn-Controller mit Zugriffsschutz

module secure_thermal_alert (
    input  wire        clk,
    input  wire        rst_n,
    input  wire [11:0] temperature,
    input  wire        config_write_en,
    input  wire [11:0] config_threshold,
    input  wire        config_alert_enable,
    input  wire [1:0]  config_gpio_mask,
    input  wire        privileged_access,    // SICHER: Berechtigungssignal
    input  wire        boot_complete,        // SICHER: Lebenszyklus-Signal
    output reg         alert_out,
    output reg         shutdown_request,
    output reg  [1:0]  gpio_alert,
    output reg         config_denied,
    output reg         config_locked
);

    reg [11:0] threshold_reg;
    reg        alert_enabled;
    reg [1:0]  gpio_mask;

    localparam MIN_THRESHOLD = 12'h100;
    localparam MAX_THRESHOLD = 12'hC00;

    // SICHER: Konfiguration nach Boot sperren
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) config_locked <= 1'b0;
        else if (boot_complete) config_locked <= 1'b1;
    end

    // SICHER: Geschützte Konfiguration mit Zugriffskontrolle
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            threshold_reg <= 12'h800;
            alert_enabled <= 1'b1;     // SICHER: Immer standardmäßig aktiviert
            gpio_mask <= 2'b11;
            config_denied <= 1'b0;
        end else if (config_write_en) begin
            config_denied <= 1'b0;

            if (!privileged_access || config_locked) begin
                config_denied <= 1'b1;
            end else begin
                if (config_threshold >= MIN_THRESHOLD && config_threshold <= MAX_THRESHOLD)
                    threshold_reg <= config_threshold;
                else
                    config_denied <= 1'b1;

                // SICHER: Warnung kann nicht deaktiviert werden
                if (!config_alert_enable) config_denied <= 1'b1;

                if (config_gpio_mask != 2'b00)
                    gpio_mask <= gpio_mask | config_gpio_mask;
            end
        end
    end

    wire over_temp = (temperature > threshold_reg);

    // SICHER: Hardware-durchgesetzte Warnung, die nicht deaktiviert werden kann
    always @(posedge clk) begin
        alert_out <= over_temp;
        shutdown_request <= over_temp;
        gpio_alert <= over_temp ? gpio_mask : 2'b00;
    end

endmodule

CVE-Beispiele

  • CVE-2020-8693: Unsachgemäße Zugriffskontrolle für thermische Warnungen in Intel-Prozessoren ermöglichte Denial of Service.
  • CVE-2019-11137: Unzureichende Zugriffskontrolle auf Leistungsverwaltungsschnittstellen.

Verwandte CWEs

  • CWE-284: Improper Access Control (Eltern)
  • CWE-1206: Power, Clock, Thermal, and Reset Concerns (Kategorie)
  • CWE-1314: Missing Write Protection for Parametric Data Values (verwandt)

Referenzen

  1. MITRE Corporation. "CWE-1320: Improper Protection for Outbound Error Messages and Alert Signals." https://cwe.mitre.org/data/definitions/1320.html
  2. Intel. "Thermal Management Guidelines"
  3. JEDEC. "Power Management Standards"