Introduction
On November 13, 2026, CISA added CVE-2026-114713 to its Known Exploited Vulnerabilities (KEV) catalog, confirming that an improper neutralization of delimiters vulnerability in UnrealIRCd is being actively exploited in the wild. This is not a theoretical protocol weakness — it is a live, confirmed attack vector against one of the most widely deployed IRC daemons on the internet.
The vulnerability is severe because of where it sits in the trust model. On any IRC network running two or more linked UnrealIRCd servers, any connected user — not an operator, not an administrator, any client — can inject server-to-server (S2S) protocol commands that the receiving daemon executes with full server authority. In IRC architecture, server authority is effectively root over the network: it can force-join users to channels, change modes network-wide, kill connections, spoof server messages, and in linked-service environments (NickServ, ChanServ) potentially manipulate authentication and access state.
If you operate an IRC network, run UnrealIRCd as part of internal collaboration infrastructure, or inherit it through game/modding communities, hosting panels, or legacy deployments — you are in scope. CISA's Binding Operational Directive (BOD) 26-04 applies to federal civilian agencies, but the defensive guidance here applies to every operator.
Technical Analysis
Affected Component
- Product: UnrealIRCd (open-source IRC daemon)
- Vulnerability class: Improper neutralization of delimiters (CWE-aligned injection flaw)
- Precondition: Target IRC network must have two or more linked servers. Standalone single-server instances are not exploitable via this vector because there is no S2S link to abuse — but most production UnrealIRCd deployments are multi-server or services-linked by design.
- Attacker position: Any authenticated or unauthenticated user able to connect to the network as a regular client. No operator privileges required.
How the Vulnerability Works
IRC networks distinguish between two protocol planes:
- Client-to-server (C2S): what a normal user speaks —
PRIVMSG,JOIN,MODE, etc. Heavily restricted. - Server-to-server (S2S): what linked servers speak to each other across a trusted link —
SERVER,SVSJOIN,SVSNICK,SVSMODE,KILL,GLOBOPS, and related routing commands. These commands are trusted implicitly because they are assumed to originate only from authenticated link peers.
CVE-2026-114713 is a delimiter neutralization failure: user-supplied input on the C2S plane is not properly sanitized for the protocol delimiters that frame S2S messages. By embedding crafted delimiter sequences into a field the daemon forwards across the server link, an attacker smuggles attacker-controlled S2S command frames into the trusted link stream. The receiving linked server parses and executes them as if they came from its legitimate peer.
The impact of server-authority command execution includes:
- Forced channel joins/parts (
SVSJOIN,SVSPART) — moving users into attacker-controlled channels to harvest conversations or deliver social-engineering lures - Network-wide mode manipulation (
SVSMODE) — removing channel protections, granting operator status - Connection termination (
KILL) — denial of service against targeted users or entire server populations - Spoofed server notices (
GLOBOPS, server-origin messages) — highly convincing phishing delivered with server trust - Services abuse — on networks with linked services packages (Atheme, Anope), injected S2S traffic can interfere with nickname/channel ownership and access lists
In post-exploitation scenarios observed in comparable IRC daemon compromises, attackers use network control as a staging point: harvesting credentials from private messages, redirecting users to malicious infrastructure, and persisting by weakening link authentication while defenders focus elsewhere.
Exploitation Status
- CISA KEV: Added 2026-11-13 — confirmed active exploitation
- Required action (per CISA): Apply vendor mitigations, ensure compliance with BOD 26-04 (Prioritizing Security Updates Based on Risk) and CISA's Forensics Triage Requirements, follow applicable BOD 26-04 cloud guidance, or discontinue use of the product if mitigations are unavailable
- CVSS: Not published in the KEV entry at time of writing; treat as critical given the authority level granted and the zero-barrier attacker position
KEV inclusion means there is an exploitation campaign happening now. Federal agencies must remediate by the due date listed in the catalog entry; private-sector operators should treat that same date as their own deadline.
Detection & Response
The highest-fidelity detection surface is the UnrealIRCd log itself: injected S2S frames frequently produce protocol-violation, link-integrity, or desynchronization errors, and post-exploitation typically shows the daemon behaving in ways a well-run network never does. The following detections assume UnrealIRCd logs are forwarded via syslog/CEF to your SIEM — if they are not, fix that today.
---
title: UnrealIRCd Daemon Spawning Suspicious Child Processes
id: 3f8c2a71-9b4e-4d61-a572-8e1f6c40b2d9
status: experimental
description: Detects the UnrealIRCd daemon (ircd/unrealircd) spawning shells or command interpreters, consistent with post-exploitation after server-authority command injection (CVE-2026-114713).
references:
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/11/14
tags:
- attack.execution
- attack.t1059.004
logsource:
category: process_creation
product: linux
detection:
selection_parent:
ParentImage|endswith:
- '/ircd'
- '/unrealircd'
selection_child:
Image|endswith:
- '/sh'
- '/bash'
- '/dash'
- '/python'
- '/python3'
- '/perl'
- '/nc'
- '/ncat'
- '/curl'
- '/wget'
condition: selection_parent and selection_child
falsepositives:
- Custom UnrealIRCd modules invoking external scripts (rare; baseline module inventory before deployment)
level: high
---
title: UnrealIRCd Server Protocol Violation or Bogus Server Message
id: 61d4e9b2-7c83-4fa5-b016-4d2a8f71c3e7
status: experimental
description: Detects UnrealIRCd log lines indicating protocol violations, bogus/spoofed server messages, or unexpected server-to-server commands — a strong indicator of CVE-2026-114713 S2S injection attempts.
references:
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/11/14
tags:
- attack.initial_access
- attack.t1190
logsource:
product: linux
service: unrealircd
detection:
keywords:
- 'protocol violation'
- 'bogus server message'
- 'Bogus server'
- 'Link denied'
- 'squitting'
- 'desync'
- 'non-server message'
- 'unknown server message'
condition: keywords
falsepositives:
- Legitimate link flapping and misconfigured peers generate occasional 'Link denied' entries; alert on rate (5+ in 10 minutes) or correlation with client connects from the same source
level: high
---
title: UnrealIRCd Injected Server-Authority Command Patterns in Logs
id: 94a1f6d3-2e57-4b88-c904-5f3e1a87d662
status: experimental
description: Detects UnrealIRCd log entries referencing server-authority commands (SVSJOIN, SVSMODE, SVSNICK, KILL from server context) at anomalous volume or from unexpected origins, consistent with successful CVE-2026-114713 exploitation.
references:
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://attack.mitre.org/techniques/T1072/
author: Security Arsenal
date: 2026/11/14
tags:
- attack.lateral_movement
- attack.t1072
logsource:
product: linux
service: unrealircd
detection:
keywords:
- 'SVSJOIN'
- 'SVSPART'
- 'SVSMODE'
- 'SVSNICK'
- 'SQUIT'
- 'GLOBOPS'
condition: keywords
falsepositives:
- Legitimate services packages (Atheme/Anope) legitimately issue SVS* commands; tune against your services server's hostname and alert when the origin field does not match the known services peer
level: medium
// Hunt for UnrealIRCd exploitation indicators across Syslog-ingested IRC daemon logs
// Look for: S2S injection artifacts, link violations, and bursts of server-authority commands
let TimeWindow = 7d;
let SvsTokens = dynamic(["SVSJOIN", "SVSPART", "SVSMODE", "SVSNICK", "GLOBOPS"]);
let ViolationTokens = dynamic(["protocol violation", "bogus server", "Bogus server", "Link denied", "desync", "non-server message"]);
union isfuzzy=true
(Syslog
| where TimeGenerated > ago(TimeWindow)
| where ProcessName has_any ("unrealircd", "ircd")
or SyslogMessage has_any ("unrealircd")
| extend Indicator = case(
SyslogMessage has_any (SvsTokens), "S2SCommandObserved",
SyslogMessage has_any (ViolationTokens), "ProtocolViolation",
"Other")
| where Indicator != "Other"
| summarize EventCount = count(),
SampleMessages = make_set(SyslogMessage, 10)
by Computer, Indicator, bin(TimeGenerated, 1h)
| where EventCount > 5),
(CommonSecurityLog
| where TimeGenerated > ago(TimeWindow)
| where DeviceProduct has_any ("unrealircd", "ircd")
| where Message has_any (SvsTokens) or Message has_any (ViolationTokens)
| summarize EventCount = count(), SampleMessages = make_set(Message, 10)
by DeviceName, bin(TimeGenerated, 1h)
| where EventCount > 5)
| order by TimeGenerated desc;
-- Security Arsenal: UnrealIRCd CVE-2026-114713 Triage Artifact
-- Enumerates running IRC daemons, their listening/established connections,
-- and locates unrealircd.conf for link-block review.
LET irc_procs = SELECT Pid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE Name =~ '(?i)unrealircd|^ircd$'
OR Exe =~ '(?i)unrealircd'
LET irc_net = SELECT Pid, Name, Family, Type, Status,
Laddr.IP AS LocalIP, Laddr.Port AS LocalPort,
Raddr.IP AS RemoteIP, Raddr.Port AS RemotePort
FROM netstat()
WHERE Name =~ '(?i)unrealircd|^ircd$'
OR Laddr.Port in (6667, 6697, 6900, 7000, 7029, 8067)
LET irc_conf = SELECT FullPath, Mtime, Size
FROM glob(globs=[
'/etc/unrealircd/**',
'/opt/unrealircd/conf/**',
'/home/*/unrealircd/conf/**',
'/usr/local/unrealircd/conf/**'
])
WHERE FullPath =~ '(?i)\\.conf$'
SELECT * FROM irc_procs
UNION ALL
SELECT NULL AS Pid, '--- NETWORK ---' AS Name, NULL AS Exe,
NULL AS CommandLine, NULL AS Username, NULL AS CreateTime
FROM irc_procs WHERE FALSE
Remediation and Verification Script
#!/usr/bin/env bash
# Security Arsenal — CVE-2026-114713 UnrealIRCd triage & hardening script
# Run as root (or via sudo) on each UnrealIRCd host.
set -euo pipefail
echo "=== [1] Identify installed UnrealIRCd version ==="
if command -v unrealircd &>/dev/null; then
unrealircd version || true
fi
# Source installs:
for d in /opt/unrealircd /usr/local/unrealircd /home/*/unrealircd; do
[ -x "$d/bin/unrealircd" ] && "$d/bin/unrealircd" version || true
done
echo "=== [2] Enumerate linked servers from live config ==="
CONF=$(find /etc/unrealircd /opt/unrealircd /usr/local/unrealircd \
-name 'unrealircd.conf' -o -name 'links.conf' 2>/dev/null | head -5)
for c in $CONF; do
echo "--- $c: link blocks ---"
grep -nE '^\s*link\s' "$c" || echo "No link blocks (single-server? still verify)"
echo "--- $c: link auth method check ---"
grep -nE 'password|fingerprint|tls|ssl' "$c" || true
done
echo "=== [3] Restrict server-link ports at the host firewall ==="
# Link ports should ONLY accept connections from known peer IPs.
# Adjust PEER_IPS and LINK_PORTS for your topology before running.
PEER_IPS=("203.0.113.10" "198.51.100.20") # <-- EDIT: your real peers
LINK_PORTS=(6900 7029) # <-- EDIT: your link ports
for port in "${LINK_PORTS[@]}"; do
for ip in "${PEER_IPS[@]}"; do
iptables -C INPUT -p tcp --dport "$port" -s "$ip" -j ACCEPT 2>/dev/null \
|| iptables -I INPUT -p tcp --dport "$port" -s "$ip" -j ACCEPT
done
iptables -C INPUT -p tcp --dport "$port" -j DROP 2>/dev/null \
|| iptables -A INPUT -p tcp --dport "$port" -j DROP
done
echo "Link ports now restricted to peer IPs only."
echo "=== [4] Collect forensic evidence BEFORE patching (CISA triage requirement) ==="
EVDIR="/var/tmp/cve-2026-114713-triage-$(date +%Y%m%d%H%M%S)"
mkdir -p "$EVDIR"
cp -a /var/log/unrealircd/ "$EVDIR/" 2>/dev/null || true
journalctl -u unrealircd --since "14 days ago" > "$EVDIR/unrealircd-journal.log" 2>/dev/null || true
ps auxf > "$EVDIR/process-tree.txt"
ss -tlnp > "$EVDIR/listening-sockets.txt"
ss -tnp state established > "$EVDIR/established-conns.txt"
echo "Evidence staged in $EVDIR — preserve before any rebuild."
echo "=== [5] Next steps (manual) ==="
echo "1. Upgrade UnrealIRCd per the vendor advisory for CVE-2026-114713."
echo "2. Rehash and verify: <installdir>/bin/unrealircd rehash"
echo "3. Confirm link blocks use TLS with certificate fingerprint verification."
echo "4. Forward ircd.* logs to your SIEM and deploy the detections in this guide."
Remediation
Immediate (within 24–48 hours):
- Upgrade UnrealIRCd to the fixed release per the vendor advisory. Check the KEV entry at the source URL and the UnrealIRCd release notes for the exact patched version for your branch (6.x/5.x). Do not run an end-of-life branch.
- Preserve forensic evidence first. CISA's KEV action explicitly references its Forensics Triage Requirements — capture IRC logs, connection state, and running processes before patching or rebuilding, especially if your network was internet-facing and multi-server.
- Firewall the link ports. Server-link listeners (commonly 6900/7000/7029, and TLS variants) must accept connections only from enumerated peer server IPs. There is no legitimate reason for a client host to ever touch a link port.
- Audit link authentication. Every
link {}block should use TLS with certificate fingerprint verification (verify-certificate/ fingerprint pinning), not a shared password alone. A stolen link password plus this vulnerability is full network compromise. - Inventory your topology. If you genuinely run a single standalone server, this vector does not apply — but verify: services packages and test instances count as linked servers.
grepthe config; don't assume.
Short term (this week):
- Rotate credentials and review services state. If exploitation is suspected, treat all link passwords, oper credentials, and services (NickServ/ChanServ) databases as potentially compromised. Review channel ownership and access lists for unauthorized changes.
- Centralize UnrealIRCd logging. Send
ircd.logvia syslog/CEF to your SIEM and deploy the detections above. Most IRC compromises go unnoticed for weeks purely because nobody watches daemon logs. - If no mitigation is available for your deployment: CISA's directive is explicit — discontinue use of the product. Migrate to a patched version or retire the service.
Compliance deadlines:
- Federal civilian agencies: remediate by the due date in the KEV catalog entry under BOD 26-04. KEV-standard timelines for confirmed-exploitation CVEs are short — treat this as an emergency change, not a routine patch cycle.
- All other operators: adopt the same deadline internally. Confirmed in-the-wild exploitation of a network-authority injection flaw is a drop-everything event.
Analyst's Note
IRC infrastructure is easy to forget. It runs quietly on a VPS somewhere, owned by no team, patched by nobody, trusted implicitly by everything linked to it. That is precisely why attackers value server-authority injection: one unprivileged client connection becomes control of the entire network's message routing and user state. If UnrealIRCd exists anywhere in your estate — including community, gaming, or development environments your org inherited — this is the week to find it, evidence it, patch it, and start logging it.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.