Skip to content

CVE-2026-32924 — OpenClaw before 2026.3.12 contains an authorization bypass vulnerability where Feishu…

Key facts

CVE-2026-32924 is a Critical (9.8) vulnerability: OpenClaw before 2026.3.12 contains an authorization bypass vulnerability where Feishu…. This entry ships ready-to-deploy detection and prevention rules (Snort, YARA, Nginx, Apache, Sigma) plus a detection-only PoC and a Docker test lab.

CVE CVE-2026-32924
Severity Critical (9.8)
Detection / prevention Snort, YARA, Nginx, Apache, Sigma
PoC poc.py
Source 2026/CVE-2026-32924/

Details

CVE-2026-32924 is a Critical (9.8) vulnerability: OpenClaw before 2026.3.12 contains an authorization bypass vulnerability where Feishu…. This entry ships a detection-only proof-of-concept (PoC), a Docker test lab, and ready-to-deploy detection and prevention rules (Snort, YARA, Nginx, Apache) — see Detection and prevention below. Source: NVD record.

English | 한국어

Description

OpenClaw before 2026.3.12 contains an authorization bypass vulnerability where Feishu reaction events with omitted chat_type are misclassified as p2p conversations instead of group chats. Attackers can exploit this misclassification to bypass groupAllowFrom and requireMention protections in group chat reaction-derived events.

Vulnerability Details

Property Value
CVE ID CVE-2026-32924
CVSS Score 9.8

Proof of Concept

Download

# Download PoC script
curl -O https://raw.githubusercontent.com/fankh/vulnerability-poc/main/2026/CVE-2026-32924/poc.py

Usage

# Run PoC against target
python3 poc.py --target <TARGET_URL>

# With authentication
python3 poc.py --target <TARGET_URL> --username <USER> --password <PASS>

⚠️ Warning: This PoC is for authorized security testing only. It uses detection-only techniques and does not exploit or damage target systems.

Test Lab

This repository includes a Docker-based test environment with both vulnerable and patched applications.

Quick Start

# Clone and navigate to CVE directory
cd CVE-2026-32924

# Start both applications
docker-compose up -d

# Run tests
./run-tests.sh    # Linux/Mac
./run-tests.ps1   # Windows PowerShell

Application Endpoints

Application URL Status
Vulnerable App http://localhost:8080 Shows vulnerability
Patched App http://localhost:8081 Demonstrates fix

Directory Structure

├── README.md           # English documentation
├── README_KO.md        # Korean documentation
├── poc.py              # PoC detection script
├── docker-compose.yml  # Container orchestration
├── run-tests.sh        # Linux/Mac test runner
├── run-tests.ps1       # Windows test runner
├── vulnerable-app/     # Vulnerable version
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
└── patched-app/        # Fixed version
    ├── app.py
    ├── Dockerfile
    └── requirements.txt

References

  • https://github.com/openclaw/openclaw/security/advisories/GHSA-m69h-jm2f-2pv8
  • https://www.vulncheck.com/advisories/openclaw-authorization-bypass-via-misclassified-reaction-events-in-feishu

Generated by PoC Generator on 2026-04-10T15:55:53.847562417

Detection and prevention

Ready-to-deploy defensive rules for CVE-2026-32924, for authorized testing and blue-team detection engineering:

References: NVD — CVE-2026-32924 · full write-up on the searchable site

Detection & prevention rules

alert tcp any any -> any any (msg:"CVE-2026-32924 OpenClaw Feishu reaction event authorization bypass attempt"; flow:established,to_server; content:"chat_type"; nocase; pcre:"/\"chat_type\"\s*:\s*\"\"/i"; content:"reaction"; nocase; distance:0; within:500; content:"event_type"; nocase; distance:0; within:200; classtype:attempted-admin; sid:1000000; rev:1; priority:2;)

alert tcp any any -> any any (msg:"CVE-2026-32924 OpenClaw missing chat_type field exploitation"; flow:established,to_server; content:"\"event_type\""; nocase; content:"reaction"; nocase; distance:0; within:100; content:!"\"chat_type\""; nocase; distance:0; within:300; content:"message"; nocase; distance:0; within:200; classtype:attempted-admin; sid:1000001; rev:1; priority:2;)

alert tcp any any -> any any (msg:"CVE-2026-32924 OpenClaw Feishu p2p misclassification attack"; flow:established,to_server; content:"p2p"; nocase; content:"reaction"; nocase; distance:0; within:200; content:"group"; nocase; distance:0; within:500; pcre:"/groupAllowFrom|requireMention/i"; classtype:policy-violation; sid:1000002; rev:1; priority:3;)

alert tcp any any -> any any (msg:"CVE-2026-32924 OpenClaw authorization bypass via reaction event manipulation"; flow:established,to_server; content:"OpenClaw"; nocase; content:"reaction"; nocase; distance:0; within:300; content:"bypass"; nocase; distance:0; within:400; pcre:"/chat_type.*null|chat_type.*undefined/i"; classtype:attempted-admin; sid:1000003; rev:1; priority:2;)

:material-file-download: prevention/snort.rules

rule CVE_2026_32924_OpenClaw_Authorization_Bypass {
    meta:
        author = "Security Engineer"
        description = "Detects OpenClaw authorization bypass vulnerability CVE-2026-32924"
        cve = "CVE-2026-32924"
        date = "2024-12-19"
        severity = "high"
        reference = "OpenClaw authorization bypass via Feishu reaction events misclassification"

    strings:
        $version_vulnerable = /OpenClaw.*[12][0-9]{3}\.[0-2]?\.[0-9]{1,2}/ nocase
        $version_specific = "2026.3.11" nocase
        $version_specific2 = "2026.3.10" nocase
        $version_specific3 = "2026.3.9" nocase

        $feishu_event = "feishu" nocase
        $reaction_event = "reaction" nocase
        $chat_type_omit = /chat_type.*null|chat_type.*undefined|chat_type.*""/ nocase
        $chat_type_missing = /"[^"]*":\s*{[^}]*}/ and not /chat_type/ nocase

        $p2p_classification = "p2p" nocase
        $group_classification = "group" nocase
        $groupAllowFrom = "groupAllowFrom" nocase
        $requireMention = "requireMention" nocase

        $bypass_pattern1 = /p2p.*group.*bypass/ nocase
        $bypass_pattern2 = /misclassif/ nocase
        $bypass_pattern3 = /omitted.*chat_type/ nocase

    condition:
        (
            ($version_vulnerable or $version_specific or $version_specific2 or $version_specific3) and
            ($feishu_event and $reaction_event) and
            ($chat_type_omit or $chat_type_missing) and
            ($p2p_classification or $group_classification) and
            ($groupAllowFrom or $requireMention)
        ) or
        (
            ($bypass_pattern1 or $bypass_pattern2 or $bypass_pattern3) and
            ($feishu_event and $reaction_event)
        )
}

rule CVE_2026_32924_Feishu_Event_Exploitation {
    meta:
        author = "Security Engineer"
        description = "Detects potential exploitation of CVE-2026-32924 Feishu event manipulation"
        cve = "CVE-2026-32924"
        date = "2024-12-19"
        severity = "medium"

    strings:
        $hex_feishu = { 66 65 69 73 68 75 }
        $hex_reaction = { 72 65 61 63 74 69 6F 6E }
        $hex_chat_type = { 63 68 61 74 5F 74 79 70 65 }

        $json_structure = /"event_type":\s*"reaction"/ nocase
        $json_missing_chat = /"user_id".*"message_id"/ and not /"chat_type"/
        $json_null_chat = /"chat_type":\s*null/
        $json_empty_chat = /"chat_type":\s*""/

        $exploit_indicator1 = /reaction.*event.*without.*chat_type/ nocase
        $exploit_indicator2 = /bypass.*group.*protection/ nocase
        $exploit_indicator3 = /p2p.*misclassification/ nocase

    condition:
        (
            ($hex_feishu and $hex_reaction) or
            ($json_structure and ($json_missing_chat or $json_null_chat or $json_empty_chat))
        ) or
        any of ($exploit_indicator*)
}

rule CVE_2026_32924_OpenClaw_Config_Bypass {
    meta:
        author = "Security Engineer"
        description = "Detects OpenClaw configuration bypass attempts related to CVE-2026-32924"
        cve = "CVE-2026-32924"
        date = "2024-12-19"
        severity = "high"

    strings:
        $config_groupAllowFrom = "groupAllowFrom" nocase
        $config_requireMention = "requireMention" nocase
        $config_bypass = /bypass.*protection/ nocase

        $event_processing = "processReactionEvent" nocase
        $event_handler = "handleFeishuReaction" nocase
        $classification_logic = /classify.*conversation/ nocase

        $vulnerable_logic1 = /if.*chat_type.*undefined/ nocase
        $vulnerable_logic2 = /default.*p2p/ nocase
        $vulnerable_logic3 = /fallback.*private/ nocase

        $attack_payload = /\{[^}]*"event_type":\s*"reaction"[^}]*\}/ and not /chat_type/

    condition:
        (
            ($config_groupAllowFrom or $config_requireMention) and
            ($event_processing or $event_handler or $classification_logic) and
            any of ($vulnerable_logic*)
        ) or
        ($attack_payload and ($config_bypass or $config_groupAllowFrom or $config_requireMention))
}

:material-file-download: prevention/yara.yar

# CVE-2026-32924: OpenClaw Authorization Bypass Prevention
# Block malicious Feishu reaction events with missing chat_type

location ~* ^/(api/|webhook/|callback/).*feishu|^/.*feishu.*(reaction|event) {
    # Block requests with missing or empty chat_type in reaction events
    if ($request_body ~* "\"event_type\":\s*\"im\.message\.reaction" ) {
        set $has_chat_type 0;
    }

    if ($request_body ~* "\"chat_type\":\s*\"[^\"]+\"" ) {
        set $has_chat_type 1;
    }

    if ($request_body ~* "\"event_type\":\s*\"im\.message\.reaction.*\"chat_type\":\s*\"\"" ) {
        return 403;
    }

    # Block reaction events without chat_type field
    if ($request_body ~* "\"event_type\":\s*\"im\.message\.reaction(?!.*\"chat_type\")" ) {
        return 403;
    }

    # Block malformed reaction payloads attempting bypass
    if ($request_body ~* "\"event_type\":\s*\"im\.message\.reaction.*\"chat_type\":\s*null" ) {
        return 403;
    }

    # Validate Content-Type for webhook endpoints
    if ($content_type !~* "application/json") {
        return 415;
    }

    # Rate limiting for webhook endpoints
    limit_req zone=webhook_limit burst=10 nodelay;

    # Security headers
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;

    proxy_pass $upstream_backend;
}

# Rate limiting zone definition (place in http block)
limit_req_zone $binary_remote_addr zone=webhook_limit:10m rate=30r/m;

# Block suspicious user agents attempting exploitation
location / {
    if ($http_user_agent ~* "(feishu|lark).*(bot|webhook|reaction)" ) {
        if ($request_method = "POST") {
            if ($request_uri !~* "^/api/v[0-9]+/webhooks/authorized/") {
                return 403;
            }
        }
    }

    # Block requests with suspicious reaction event patterns in query params
    if ($args ~* "event_type.*reaction.*chat_type=($|&)" ) {
        return 403;
    }

    proxy_pass $upstream_backend;
}

# Additional protection for OpenClaw API endpoints
location ~* ^/api/v[0-9]+/(chat|group|message)/ {
    # Enforce proper authorization headers
    if ($http_authorization = "") {
        return 401;
    }

    # Block attempts to manipulate chat classification
    if ($request_body ~* "\"chat_type\":\s*\"(|null|undefined)\"") {
        return 403;
    }

    # Block JSON payloads with chat_type field manipulation
    if ($request_body ~* "chat_type.*[\x00-\x1F\x7F]") {
        return 403;
    }

    proxy_pass $upstream_backend;
}

:material-file-download: prevention/nginx.conf

# ModSecurity rules for CVE-2026-32924 - OpenClaw Authorization Bypass
# Protects against Feishu reaction events authorization bypass vulnerability

# Rule 1000000: Block requests to OpenClaw endpoints with missing chat_type in reaction events
SecRule REQUEST_URI "@contains /api/feishu" \
    "id:1000000,\
    phase:2,\
    block,\
    msg:'CVE-2026-32924: OpenClaw Feishu reaction event missing chat_type detected',\
    logdata:'URI: %{REQUEST_URI}, Body: %{REQUEST_BODY}',\
    severity:'CRITICAL',\
    tag:'attack-injection',\
    tag:'CVE-2026-32924',\
    chain"
    SecRule REQUEST_BODY "@contains \"event_type\":\"im.message.reaction\"" \
        "chain"
        SecRule REQUEST_BODY "!@contains \"chat_type\"" \
            "setvar:'tx.cve_2026_32924_score=+5'"

# Rule 1000001: Detect Feishu webhook payloads with reaction events lacking chat_type
SecRule REQUEST_HEADERS:Content-Type "@contains application/json" \
    "id:1000001,\
    phase:2,\
    block,\
    msg:'CVE-2026-32924: Feishu reaction event without chat_type in JSON payload',\
    logdata:'Content-Type: %{REQUEST_HEADERS.Content-Type}, Body: %{REQUEST_BODY}',\
    severity:'HIGH',\
    tag:'attack-injection',\
    tag:'CVE-2026-32924',\
    chain"
    SecRule REQUEST_BODY "@rx \"event_type\"\s*:\s*\"im\.message\.reaction\"" \
        "chain"
        SecRule REQUEST_BODY "!@rx \"chat_type\"\s*:\s*\"(p2p|group)\"" \
            "setvar:'tx.cve_2026_32924_score=+3'"

# Rule 1000002: Block OpenClaw API calls with reaction events missing required fields
SecRule REQUEST_URI "@rx ^/api/(webhook|feishu|openclaw)" \
    "id:1000002,\
    phase:2,\
    block,\
    msg:'CVE-2026-32924: OpenClaw API reaction event with insufficient authorization context',\
    logdata:'URI: %{REQUEST_URI}, Method: %{REQUEST_METHOD}',\
    severity:'HIGH',\
    tag:'attack-injection',\
    tag:'CVE-2026-32924',\
    chain"
    SecRule REQUEST_BODY "@rx \"event\".*\"im\.message\.reaction\"" \
        "chain"
        SecRule REQUEST_BODY "@rx \"message\".*\"mentions\"" \
            "chain"
            SecRule REQUEST_BODY "!@rx \"chat_type\"\s*:\s*\"group\"" \
                "setvar:'tx.cve_2026_32924_score=+4'"

# Rule 1000003: Detect potential bypass attempts via malformed Feishu payloads
SecRule ARGS "@rx im\.message\.reaction" \
    "id:1000003,\
    phase:2,\
    block,\
    msg:'CVE-2026-32924: Suspicious Feishu reaction event in request parameters',\
    logdata:'Suspicious Args: %{MATCHED_VAR_NAME}=%{MATCHED_VAR}',\
    severity:'MEDIUM',\
    tag:'attack-injection',\
    tag:'CVE-2026-32924',\
    chain"
    SecRule ARGS "!@rx chat_type" \
        "setvar:'tx.cve_2026_32924_score=+2'"

# Rule 1000004: Block requests with reaction events that could bypass group protections
SecRule REQUEST_BODY "@rx \"(?:event_type|type)\"\s*:\s*\"im\.message\.reaction\"" \
    "id:1000004,\
    phase:2,\
    block,\
    msg:'CVE-2026-32924: Feishu reaction event potentially bypassing group chat protections',\
    logdata:'Body excerpt: %{MATCHED_VAR}',\
    severity:'CRITICAL',\
    tag:'attack-injection',\
    tag:'CVE-2026-32924',\
    chain"
    SecRule REQUEST_BODY "@rx \"(?:groupAllowFrom|requireMention)\"" \
        "chain"
        SecRule REQUEST_BODY "!@rx \"chat_type\"\s*:\s*\"group\"" \
            "setvar:'tx.cve_2026_32924_score=+5'"

# Rule 1000005: Anomaly scoring threshold for CVE-2026-32924 detection
SecRule TX:CVE_2026_32924_SCORE "@ge 3" \
    "id:1000005,\
    phase:2,\
    block,\
    msg:'CVE-2026-32924: OpenClaw authorization bypass attack threshold exceeded',\
    logdata:'Attack Score: %{TX.CVE_2026_32924_SCORE}',\
    severity:'CRITICAL',\
    tag:'attack-injection',\
    tag:'CVE-2026-32924'"

:material-file-download: prevention/httpd.conf

Frequently asked questions

What is CVE-2026-32924?

CVE-2026-32924 is a Critical (9.8) vulnerability: OpenClaw before 2026.3.12 contains an authorization bypass vulnerability where Feishu…. This entry ships ready-to-deploy detection and prevention rules (Snort, YARA, Nginx, Apache, Sigma) plus a detection-only PoC and a Docker test lab.

How do I detect CVE-2026-32924?

Deploy the Snort and YARA detection rule included with this entry (see Detection & prevention rules below), then validate it against the detection-only PoC in the Docker test lab.

How do I block or mitigate CVE-2026-32924?

Apply the Nginx and Apache mitigation config included with this entry, and upgrade to a fixed version per the vendor advisory (see the NVD record for affected versions).


For authorized security testing and research only. See the full source and NVD record.