☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2023-52389

CVE-2023-52389 Buffer Overflow in Poco
📅 PUBLISHED: 2024-01-27 00:00 UTC 🔄 UPDATED: 2026-09-23 20:37 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix ⏳ CVSS score pending NVD analysis
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.85%
👁️
0.85% probability
21.3× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2023-52389 is a critical vulnerability in the POCO C++ Libraries, specifically within the UTF32Encoding.cpp module. The flaw involves an integer overflow in the Poco::UTF32Encoding::convert() and Poco::UTF32::queryConvert() functions. When a UTF-32 byte sequence evaluates to a value of 0x80000000 or higher, these functions may return a negative integer, leading to a stack buffer overflow. This can be exploited by an attacker to achieve remote code execution or cause a denial of service. The vulnerability affects all versions prior to 1.11.8p2, 1.12.5p2, and 1.13.0. No public proof-of-concept (PoC) or exploit code is currently available, but the risk is significant due to the widespread use of POCO in network services and applications.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

POCO is a C++ library used in many open-source and commercial projects. This vulnerability can be introduced into downstream software through package managers like vcpkg, Conan, or direct source inclusion. Organizations should audit their dependencies for affected POCO versions and update immediately.

CVSS Breakdown & Threat Level

  • CVSS Score: 9.8 (Critical)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: None
  • User Interaction: None
  • Scope: Unchanged
  • Confidentiality Impact: High
  • Integrity Impact: High
  • Availability Impact: High

The vulnerability is remotely exploitable without authentication, making it highly dangerous for internet-facing services.

Deep Dive & Mechanics

The vulnerability resides in the UTF32Encoding.cpp file of the POCO C++ Libraries. The functions Poco::UTF32Encoding::convert() and Poco::UTF32::queryConvert() are responsible for converting UTF-32 byte sequences to Unicode code points. The issue occurs when a UTF-32 sequence represents a value of 0x80000000 or higher. Due to an integer overflow, these functions may return a negative integer instead of the correct positive value. This negative return value is then used in subsequent operations, such as buffer size calculations or memory copy operations, leading to a stack buffer overflow.

The root cause is the lack of proper bounds checking on the decoded value. The code does not validate that the decoded code point is within the valid Unicode range (0x000000 to 0x10FFFF). When a value >= 0x80000000 is processed, it overflows the signed integer representation, resulting in a negative number. This negative value can cause the program to write data beyond the allocated stack buffer, corrupting adjacent memory and potentially allowing an attacker to control execution flow.

Vulnerable vs. Patched Code

Vulnerable Code (simplified):

int UTF32Encoding::convert(const unsigned char* bytes) const {
    int value = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
    // No check for value >= 0x80000000
    return value;
}

Patched Code (simplified):

int UTF32Encoding::convert(const unsigned char* bytes) const {
    unsigned int value = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
    if (value >= 0x80000000) {
        // Handle invalid code point
        return -1; // or throw exception
    }
    return static_cast<int>(value);
}

The patch ensures that the decoded value is treated as unsigned and checked against the invalid range before being returned.

Exploitation & Lab Setup

Red Team

No public exploit code is available. However, an attacker could craft a malicious UTF-32 byte sequence that decodes to a value >= 0x80000000. This sequence would be sent to a service using POCO's UTF-32 encoding functions. The resulting stack buffer overflow could be leveraged to overwrite the return address or other critical data on the stack, leading to arbitrary code execution.

Lab Setup:

  1. Set up a vulnerable POCO-based service (e.g., an HTTP server using POCO's UTF-32 encoding).
  2. Send a crafted payload containing a UTF-32 sequence that triggers the overflow.
  3. Use a debugger to analyze the crash and develop a working exploit.

Example Payload (hex):

00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00

This sequence decodes to 0x80000000, triggering the overflow.

Blue Team

Detection:

  • Monitor for unusual UTF-32 encoded data in network traffic.
  • Use intrusion detection systems to flag sequences that decode to values >= 0x80000000.
  • Implement application-level input validation to reject invalid UTF-32 sequences.

Mitigation:

  • Immediately update POCO to version 1.11.8p2, 1.12.5p2, or 1.13.0.
  • If patching is not possible, deploy a Web Application Firewall (WAF) rule to block requests containing suspicious UTF-32 patterns.
  • Enable stack canaries and ASLR to increase the difficulty of exploitation.

Indicators of Compromise (IOCs)

  • Network: UTF-32 byte sequences where the decoded value is >= 0x80000000 (e.g., bytes starting with 0x80 or higher in the first byte).
  • File: Modified UTF32Encoding.cpp or binary files with the vulnerable code.
  • Memory: Stack corruption patterns consistent with buffer overflow.
  • Logs: Application crashes or exceptions related to UTF-32 conversion.

Detection Engineering

YARA Rule

rule CVE_2023_52389_POCO_UTF32_Overflow {
    meta:
        description = "Detects vulnerable POCO UTF-32 encoding code"
        author = "Valters IT"
        date = "2025-04-17"
        cve = "CVE-2023-52389"
    strings:
        $vuln_func1 = "UTF32Encoding::convert" ascii wide nocase
        $vuln_func2 = "UTF32::queryConvert" ascii wide nocase
        $overflow_pattern = { 00 00 00 80 } // Example trigger
    condition:
        any of ($vuln_func*) and $overflow_pattern
}

Sigma Rule

title: CVE-2023-52389 - POCO UTF-32 Integer Overflow
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects network traffic containing UTF-32 sequences that trigger the overflow
author: Valters IT
date: 2025-04-17
logsource:
    category: network
    product: suricata
detection:
    selection:
        payload|contains: "00000080"
    condition: selection
falsepositives:
    - Legitimate use of high Unicode code points (rare)
level: high

Suricata Rule

alert tcp any any -> any any (msg:"CVE-2023-52389 POCO UTF-32 Integer Overflow Attempt"; content:"|00 00 00 80|"; depth:4; sid:1000001; rev:1;)

Remediation & Mitigation

  1. Immediate Patch: Update POCO to version 1.11.8p2, 1.12.5p2, or 1.13.0.
  2. Workaround: If patching is delayed, implement input validation to reject UTF-32 sequences with values >= 0x80000000.
  3. Compensating Controls: Use stack protection mechanisms (e.g., /GS, -fstack-protector) and enable ASLR.
  4. Monitoring: Deploy the provided detection rules to identify exploitation attempts.
  5. Vendor Communication: Ensure all downstream dependencies using POCO are updated.

Valters IT
Securing Digital Frontiers

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2023-52389/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.