The only agent that thinks for itself

Autonomous Monitoring with self-learning AI built-in, operating independently across your entire stack.

Unlimited Metrics & Logs
Machine learning & MCP
5% CPU, 150MB RAM
3GB disk, >1 year retention
800+ integrations, zero config
Dashboards, alerts out of the box
> Discover Netdata Agents

Centralized metrics streaming and storage

Aggregate metrics from multiple agents into centralized Parent nodes for unified monitoring across your infrastructure.

Stream from unlimited agents
Long-term data retention
High availability clustering
Data replication & backup
Scalable architecture
Enterprise-grade security
> Learn about Parents

Fully managed cloud platform

Access your monitoring data from anywhere with our SaaS platform. No infrastructure to manage, automatic updates, and global availability.

Zero infrastructure management
99.9% uptime SLA
Global data centers
Automatic updates & patches
Enterprise SSO & RBAC
SOC2 & ISO certified
> Explore Netdata Cloud

Deploy Netdata Cloud in your infrastructure

Run the full Netdata Cloud platform on-premises for complete data sovereignty and compliance with your security policies.

Complete data sovereignty
Air-gapped deployment
Custom compliance controls
Private network integration
Dedicated support team
Kubernetes & Docker support
> Learn about Cloud On-Premises

Powerful, intuitive monitoring interface

Modern, responsive UI built for real-time troubleshooting with customizable dashboards and advanced visualization capabilities.

Real-time chart updates
Customizable dashboards
Dark & light themes
Advanced filtering & search
Responsive on all devices
Collaboration features
> Explore Netdata UI

Monitor on the go

Native iOS and Android apps bring full monitoring capabilities to your mobile device with real-time alerts and notifications.

iOS & Android apps
Push notifications
Touch-optimized interface
Offline data access
Biometric authentication
Widget support
> Download apps

The future of infrastructure observability

See our strategic direction across AI-native observability, full-stack signals, operational intelligence, and enterprise platform maturity.

AI-native observability
Full-stack signal coverage
Operational intelligence
Enterprise platform maturity
Agent releases every 6 weeks
Cloud continuous delivery
> Explore Product Roadmap

Best energy efficiency

True real-time per-second

100% automated zero config

Centralized observability

Multi-year retention

High availability built-in

Zero maintenance

Always up-to-date

Enterprise security

Complete data control

Air-gap ready

Compliance certified

Millisecond responsiveness

Infinite zoom & pan

Works on any device

Native performance

Instant alerts

Monitor anywhere

AI-native observability

Continuous delivery

Open source foundation

80% Faster Incident Resolution

AI-powered troubleshooting from detection, to root cause and blast radius identification, to reporting.

True Real-Time and Simple, even at Scale

Linearly and infinitely scalable full-stack observability, that can be deployed even mid-crisis.

90% Cost Reduction, Full Fidelity

Instead of centralizing the data, Netdata distributes the code, eliminating pipelines and complexity.

See and Map Your Entire Network

Live topology, flow analytics, and SNMP device and trap monitoring — unified with your full-stack observability.

Control Without Surrender

SOC 2 Type 2 certified with every metric kept on your infrastructure.

Integrations

800+ collectors and notification channels, auto-discovered and ready out of the box.

800+ data collectors
Auto-discovery & zero config
Cloud, infra, app protocols
Notifications out of the box
> Explore integrations
Real Results
46% Cost Reduction

Reduced monitoring costs by 46% while cutting staff overhead by 67%.

— Leonardo Antunez, Codyas

Zero Pipeline

No data shipping. No central storage costs. Query at the edge.

From Our Users
"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

No Query Language

Point-and-click troubleshooting. No PromQL, no LogQL, no learning curve.

Enterprise Ready
67% Less Staff, 46% Cost Cut

Enterprise efficiency without enterprise complexity—real ROI from day one.

— Leonardo Antunez, Codyas

SOC 2 Type 2 Certified

Zero data egress. Only metadata reaches the cloud. Your metrics stay on your infrastructure.

Full Coverage
800+ Collectors

Auto-discovered and configured. No manual setup required.

Any Notification Channel

Slack, PagerDuty, Teams, email, webhooks—all built-in.

Built for the People Who Get Paged

Because 3am alerts deserve instant answers, not hour-long hunts.

Every Industry Has Rules. We Master Them.

See how healthcare, finance, and government teams cut monitoring costs 90% while staying audit-ready.

Monitor Any Technology. Configure Nothing.

Install the agent. It already knows your stack.
From Our Users
"A Rare Unicorn"

Netdata gives more than you invest in it. A rare unicorn that obeys the Pareto rule.

— Eduard Porquet Mateu, TMB Barcelona

99% Downtime Reduction

Reduced website downtime by 99% and cloud bill by 30% using Netdata alerts.

— Falkland Islands Government

Real Savings
30% Cloud Cost Reduction

Optimized resource allocation based on Netdata alerts cut cloud spending by 30%.

— Falkland Islands Government

46% Cost Cut

Reduced monitoring staff by 67% while cutting operational costs by 46%.

— Codyas

Real Coverage
"Plugin for Everything"

Netdata has agent capacity or a plugin for everything, including Windows and Kubernetes.

— Eduard Porquet Mateu, TMB Barcelona

"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

Real Speed
Troubleshooting in 30 Seconds

From 2-3 minutes to 30 seconds—instant visibility into any node issue.

— Matthew Artist, Nodecraft

20% Downtime Reduction

20% less downtime and 40% budget optimization from out-of-the-box monitoring.

— Simon Beginn, LANCOM Systems

Pay per Node. Unlimited Everything Else.

One price per node. Unlimited metrics, logs, users, and retention. No per-GB surprises.

Free tier—forever
No metric limits or caps
Retention you control
Cancel anytime
> See pricing plans

What's Your Monitoring Really Costing You?

Most teams overpay by 40-60%. Let's find out why.

Expose hidden metric charges
Calculate tool consolidation
Customers report 30-67% savings
Results in under 60 seconds
> See what you're really paying

Your Infrastructure Is Unique. Let's Talk.

Because monitoring 10 nodes is different from monitoring 10,000.

On-prem & air-gapped deployment
Volume pricing & agreements
Architecture review for your scale
Compliance & security support
> Start a conversation

Monitoring That Sells Itself

Deploy in minutes. Impress clients in hours. Earn recurring revenue for years.

30-second live demos close deals
Zero config = zero support burden
Competitive margins & deal protection
Response in 48 hours
> Apply to partner

Per-Second Metrics at Homelab Prices

Same engine, same dashboards, same ML. Just priced for tinkerers.

Community: Free forever · 5 nodes · non-commercial
Homelab: $90/yr · unlimited nodes · fair usage
> Get the Homelab Plan

$1,000 Per Referral. Unlimited Referrals.

Your colleagues get 10% off. You get 10% commission. Everyone wins.

10% of subscriptions, up to $1,000 each
Track earnings inside Netdata Cloud
PayPal/Venmo payouts in 3-4 weeks
No caps, no complexity
> Get your referral link
Cost Proof
40% Budget Optimization

"Netdata's significant positive impact" — LANCOM Systems

Calculate Your Savings

Compare vs Datadog, Grafana, Dynatrace

Savings Proof
46% Cost Reduction

"Cut costs by 46%, staff by 67%" — Codyas

30% Cloud Bill Savings

"Reduced cloud bill by 30%" — Falkland Islands Gov

Enterprise Proof
"Better Than Combined Alternatives"

"Better observability with Netdata than combining other tools." — TMB Barcelona

Real Engineers, <24h Response

DPA, SLAs, on-prem, volume pricing

Why Partners Win
Demo Live Infrastructure

One command, 30 seconds, real data—no sandbox needed

Zero Tickets, High Margins

Auto-config + per-node pricing = predictable profit

Homelab Ready
Free Video Course

8-episode Netdata tutorial by LearnLinux.tv

76k+ GitHub Stars

3rd most starred monitoring project

Worth Recommending
Product That Delivers

Customers report 40-67% cost cuts, 99% downtime reduction

Zero Risk to Your Rep

Free tier lets them try before they buy

AI Support Assistant, Available 24/7

Nedi has access to all official documentation, source code, and resources. Ask any question about Netdata—responds in your language.

Deployment & configuration
Troubleshooting & sizing
Alerts & notifications
Evidence-based answers
> Ask Nedi now

Never Fight Fires Alone

Docs, community, and expert help—pick your path to resolution.

Learn.netdata.cloud docs
Discord, Forums, GitHub
Premium support available
> Get answers now

60 Seconds to First Dashboard

One command to install. Zero config. 850+ integrations documented.

Linux, Windows, K8s, Docker
Auto-discovers your stack
> Read our documentation

76,000+ Engineers Strong

615+ contributors. 1.5M daily downloads. One mission: simplify observability.

Per-Second. 90% Cheaper. Data Stays Home.

Side-by-side comparisons: costs, real-time granularity, and data sovereignty for every major tool.

See why teams switch from Datadog, Prometheus, Grafana, and more.

> Browse all comparisons
Edge-Native Observability, Born Open Source
Per-second visibility, ML on every metric, and data that never leaves your infrastructure.
Founded in 2016
615+ contributors worldwide
Remote-first, engineering-driven
Open source first
> Read our story
Promises We Publish—and Prove
12 principles backed by open code, independent validation, and measurable outcomes.
Open source, peer-reviewed
Zero config, instant value
Data sovereignty by design
Aligned pricing, no surprises
> See all 12 principles
Edge-Native, AI-Ready, 100% Open
76k+ stars. Full ML, AI, and automation—GPLv3+, not premium add-ons.
76,000+ GitHub stars
GPLv3+ licensed forever
ML on every metric, included
Zero vendor lock-in
> Explore our open source
Build Real-Time Observability for the World
Remote-first team shipping per-second monitoring with ML on every metric.
Remote-first, fully distributed
Open source (76k+ stars)
Challenging technical problems
Your code on millions of systems
> See open roles
Meet the Team Behind Netdata
Conferences, meetups, and tradeshows where you can see Netdata in action and talk to the engineers who build it.
Live demos and deep dives
Book 1-on-1 meetings
Talks and panel sessions
Event recaps and photos
> See all events
Talk to a Netdata Human in <24 Hours
Sales, partnerships, press, or professional services—real engineers, fast answers.
Discuss your observability needs
Pricing and volume discounts
Partnership opportunities
Media and press inquiries
> Book a conversation
Your Data. Your Rules.
On-prem data, cloud control plane, transparent terms.
Trust & Scale
76,000+ GitHub Stars

One of the most popular open-source monitoring projects

SOC 2 Type 2 Certified

Enterprise-grade security and compliance

Data Sovereignty

Your metrics stay on your infrastructure

Validated
University of Amsterdam

"Most energy-efficient monitoring solution" — ICSOC 2023, peer-reviewed

ADASTEC (Autonomous Driving)

"Doesn't miss alerts—mission-critical trust for safety software"

Community Stats
615+ Contributors

Global community improving monitoring for everyone

1.5M+ Downloads/Day

Trusted by teams worldwide

GPLv3+ Licensed

Free forever, fully open source agent

Why Join?
Remote-First

Work from anywhere, async-friendly culture

Impact at Scale

Your work helps millions of systems

$ guides / activemq / activemq-cve-2023-46604-openwire-rce ▌

Operations Guides

ActiveMQ CVE-2023-46604: the OpenWire deserialization RCE and how to detect exposure

CVE-2023-46604 is a CVSS 10.0 unauthenticated remote code execution vulnerability in the ActiveMQ Classic OpenWire protocol marshaller. If an attacker can open a TCP connection to your OpenWire transport connector (default port 61616), they can send a crafted packet that causes the broker to instantiate an arbitrary class on the classpath. No credentials are required. It was exploited in the wild before and immediately after disclosure in October 2023, and unpatched, internet-reachable brokers are still being found.

This article covers two situations: you just found out you might be running a vulnerable broker and need to triage fast, or you are doing a scheduled exposure audit. The sequence is the same: determine the version, determine network reachability, look for exploitation evidence, then patch and restrict.

The fix shipped in ActiveMQ 5.15.16, 5.16.7, 5.17.6, and 5.18.3. Anything older on those branches is vulnerable. Per the Apache advisory, the affected ranges are 5.18.0 through 5.18.2, 5.17.0 through 5.17.5, 5.16.0 through 5.16.6, all versions before 5.15.16, and the Legacy OpenWire Module 5.8.0 through 5.15.15.

What this means

The vulnerability is in the OpenWire marshaller’s handling of the ClassInfo structure inside an ExceptionResponse command. The broker (or client) unmarshals a class name supplied by the remote peer without validating that it is actually a Throwable. The known exploit chain uses a Spring configuration class to load a malicious XML file from an attacker-controlled HTTP server, which yields command execution as the broker’s OS user. Two properties make this unusually dangerous:

  • It is pre-authentication. The attacker only needs TCP reachability to the OpenWire port. No valid JMS credentials, no web console access, nothing else.
  • It hits both sides of the connection. Brokers are vulnerable when they receive the crafted packet, and Java-based OpenWire clients are vulnerable when a malicious or compromised broker sends it to them. Patching only your brokers leaves client-side exposure in place.

Multiple incident response firms documented exploitation delivering cryptominers, ransomware, and remote access tooling against exposed brokers, with forensic evidence of exploitation weeks before public disclosure. An unpatched broker reachable from an untrusted network should be treated as potentially compromised, not just potentially vulnerable.

flowchart TD
  A[Broker on 61616] --> B{Version patched?}
  B -- "5.15.16+ / 5.16.7+ / 5.17.6+ / 5.18.3+" --> C{61616 reachable from untrusted networks?}
  B -- "older / unknown" --> D[Treat as exposed]
  D --> E[Isolate network access now]
  D --> F[Hunt logs for exploit evidence]
  D --> G[Patch broker and OpenWire clients]
  C -- "yes" --> H[Still restrict: management and transport ports off untrusted networks]
  C -- "no" --> I[Patch on schedule, verify bind addresses]

Exposure factors

FactorWhat it looks likeFirst thing to check
Vulnerable versionBroker on any 5.x build older than 5.15.16/5.16.7/5.17.6/5.18.3Version in the startup banner of activemq.log, or jar filenames in the ActiveMQ lib directory
OpenWire port reachable from untrusted network61616 bound to 0.0.0.0, no firewall restriction, or exposed through a load balancer or security groupss -tlnp for the bind address, plus the actual network path (cloud SG, LB, DNAT)
Default or no broker authenticationadmin/admin works, or no authentication plugin configuredBroker config for the authentication plugin
Legacy OpenWire Module5.8.0 through 5.15.15 module in use on otherwise newer installsCheck whether the legacy module is deployed
Java OpenWire clients unpatchedClient applications embed an older activemq-client jar and connect to brokers you do not fully controlDependency tree of client applications

Quick checks

Run these read-only commands on the broker host. Nothing here restarts or modifies the broker.

# 1. Confirm the OpenWire listener, its bind address, and the owning PID
ss -tlnp | grep 61616
# 0.0.0.0:61616 or :::61616 means every interface. 127.0.0.1:61616 means local only.
# The -p flag shows the PID/process name; confirm it is the broker JVM.

# 2. Count current established OpenWire connections and note source IPs
ss -tn state established '( sport = :61616 )' | wc -l
ss -tn state established '( sport = :61616 )' | awk 'NR>1 {print $6}' | sort | uniq -c | sort -rn | head -20

# 3. Check the web console and JMX exposure while you are here
ss -tlnp | grep -E '8161|1099'
# 4. Determine the running version from the broker log startup banner
grep -i "Apache ActiveMQ" /opt/activemq/data/activemq.log | tail -5

# 5. Cross-check jar versions on disk
ls /opt/activemq/lib/ | grep -i activemq | head -20
# 6. Hunt the broker log for deserialization and transport-failure signatures
grep -ci "ClassNotFoundException\|InvalidClassException\|StreamCorruptedException\|deserialization" /opt/activemq/data/activemq.log

grep -i "Transport Connection to" /opt/activemq/data/activemq.log | grep -i "SocketException" | tail -20

# 7. Authentication failure noise (brute force or scanning pressure)
grep -ci "authentication failed\|invalid credentials\|login failed" /opt/activemq/data/activemq.log

Two notes on the log hunt:

  • Rapid7’s incident response team reported that successful exploitation produced a single WARN line of the form Transport Connection to: tcp://<attacker_ip>:<port> failed: java.net.SocketException: An established connection was aborted by the software in your host machine (the abort message is part of the same WARN line). Treat matching lines as a strong signal, but treat their absence as inconclusive. Logging configuration and attacker behavior vary, and a quiet log does not prove the broker was not compromised.
  • The deserialization-error patterns (ClassNotFoundException, InvalidClassException) are useful both for exploit detection and for distinguishing a client version mismatch from an attack. Repeated deserialization errors naming gadget-style class paths (for example under org.apache.commons.collections.functors or org.springframework.beans.factory) are a page-worthy event, not a ticket.

Also check reachability from outside the host, not just the bind address. A broker bound to 0.0.0.0 behind a firewall that blocks 61616 is a different risk from one behind a permissive cloud security group or an accidental load balancer listener. Scan from a host on each network segment that should NOT have access.

How to diagnose it

  1. Establish the version and patch state. Use the startup banner and jar listing above. Map it against the fixed versions: 5.15.16, 5.16.7, 5.17.6, 5.18.3. If you cannot determine the version, assume vulnerable.
  2. Map the network exposure. Record the bind address, the firewall or security group rules, and any NAT or load balancer path that can deliver TCP 61616 from an untrusted network. Do the same for 8161 (web console) and 1099 (JMX), since default credentials plus an exposed management interface is the second classic ActiveMQ compromise path.
  3. Hunt for exploitation evidence. Grep for the socket-abort WARN signature and deserialization errors as above. If you find attacker IPs or suspicious ClassNotFound patterns, pivot to host forensics: unexpected child processes of the broker JVM, outbound HTTP from the broker host to unknown servers (the Spring XML fetch), new files written by the broker user, and persistence mechanisms. At that point this is an incident response, not a patching exercise.
  4. Check client-side exposure. Inventory applications embedding the ActiveMQ OpenWire client. Any client on a vulnerable version that connects to brokers outside your full control inherits the same RCE risk in the other direction.
  5. Decide containment. If the broker is vulnerable AND reachable from an untrusted network, restrict network access to 61616 first (firewall, security group, or binding the transport connector to a trusted interface). Do not wait for the patch window. If exploitation evidence exists, isolate the host before anything else.

Signals to monitor going forward

SignalWhy it mattersWarning sign
Deserialization errors in broker logPrimary application-layer exploit fingerprint for this CVE classAny repeat occurrence; any match on gadget-style package names
Transport connection failuresExploit attempts and scanning both show up as abnormal connection churn and socket errors on 61616WARN lines with unfamiliar source IPs, especially followed by aborts
Connection count anomaliesExploitation and scanning appear as connections from IPs outside your known client setEstablished 61616 sessions from addresses not in your client inventory
Authentication failure ratePre-attack reconnaissance and brute force against default credentialsSustained failures from a single source, or broad failures after a credential change
Web console / JMX access sourcesManagement interfaces should only see your management networkAny session to 8161 or 1099 from a non-allowlisted source
Unexpected child processes or outbound connections from the broker hostPost-exploitation behavior: payload fetch, miner, C2Broker JVM spawning shells, or egress to unknown HTTP servers

Fixes

Patch the broker

Upgrade to 5.15.16, 5.16.7, 5.17.6, 5.18.3, or any later release on a supported line. The fix adds class-type validation in the OpenWire marshaller so only Throwable types can be instantiated through the vulnerable path. This is the only complete fix. Check the Java version requirement of your target release line before upgrading: the 5.17 line and later require Java 11 (that includes the 5.18 and 5.19 lines), and the 6.x line requires Java 17.

Patch Java OpenWire clients

Client applications embedding the vulnerable marshaller are exploitable by a malicious broker. Upgrade the client dependency in lockstep. This is the part most teams miss because advisories emphasize the broker.

Restrict network access to the OpenWire port

Regardless of patch state, 61616 should only be reachable from networks that legitimately host your JMS clients. Use host firewall rules, cloud security groups, or bind the transport connector to a specific interface. Apply the same discipline to the web console (8161; bound to 127.0.0.1 by default since 5.16.0, to all interfaces on older releases) and the remote JMX connector (disabled by default in current configs via createConnector="false"). If your deployment has re-enabled either for remote management, audit the source restriction and credentials.

Set the SERIALIZABLE_PACKAGES whitelist, with the right expectations

The org.apache.activemq.SERIALIZABLE_PACKAGES system property whitelists which Java packages may be deserialized in JMS ObjectMessage bodies. Configure it to only the packages your applications genuinely serialize. This hardens you against the ObjectMessage deserialization class of attacks (CVE-2015-5254 and similar). Important caveat: it controls the ObjectMessage path, not the OpenWire ExceptionResponse marshaller path that CVE-2023-46604 exploits. It is defense in depth, not a substitute for the patch.

One upgrade gotcha reported on newer releases: the 5.19.7 / 6.2.6 security-hardening releases removed java.lang from the default serializable packages list. If your applications send ObjectMessages carrying java.lang types, they will fail deserialization after that upgrade until you explicitly add java.lang back. Plan for this when jumping from an old 5.x line straight to current.

Replace default credentials

The broker ships with well-known credentials (admin/admin). Change them on the broker transports and the web console, and use the authorization plugin to restrict which users can create and access which destinations. Auto-created destinations plus weak credentials turn a messaging bug into a network foothold.

Prevention

  • Never expose 61616 to untrusted networks. Patch state changes; architecture should not depend on it. The OpenWire port is for your applications only.
  • Track broker version as an inventory item. You should be able to answer “what ActiveMQ version runs where” without SSHing into anything.
  • Alert on the security signals above, especially deserialization errors and management-interface access from unexpected sources. These are cheap log-based checks.
  • Audit bind addresses after every config change. Exposure regressions usually come from someone “temporarily” binding to 0.0.0.0 or opening a security group for a test.
  • Watch for scanning pressure. Connection-count anomalies and authentication failure spikes on 61616 are early indicators that your broker is on someone’s target list.

How Netdata helps

  • Per-second connection visibility: Netdata charts TCP connection counts and rates on the broker host, so a sudden burst of new sessions on 61616 from scanning or exploit attempts stands out against your client baseline instead of hiding in a 5-minute average.
  • Correlation across signals: Connection anomalies on 61616 can be viewed next to broker process CPU, thread count, and network egress. The post-exploitation shape (odd child activity, unexpected outbound traffic, CPU spike from a miner) becomes visible in one place rather than across three tools.
  • JMX and JVM context: Broker MBean metrics (connections, destinations, memory) alongside JVM heap and GC give you a behavioral baseline, which makes deviations during and after an incident easier to spot and document.
  • Log-based signal groundwork: Pairing Netdata’s system metrics with your centralized log alerts on the deserialization and transport-failure patterns above covers both the network layer and the application layer of this CVE class.