---
title: "WEB-TOM-004 Tomcat AJP Connector Unprotected (Ghostcat)"
canonical: https://openvapt.com/checks/WEB-TOM-004.html
html: https://openvapt.com/checks/WEB-TOM-004.html
site: OpenVAPT, https://openvapt.com/
license: OpenVAPT Source-Available Licence 1.3, https://openvapt.com/legal/licence-text.html
modified: 2026-10-14
version: 0.1.0-alpha.6
---

# WEB-TOM-004 Tomcat AJP Connector Unprotected (Ghostcat)

Checks for an active AJP connector that has no shared secret and is not bound to loopback, or that disables the secret requirement.

- Domain: Web Apps
- Severity: Critical
- Control category: Web Application Security
- Fix effort: low
- CVSS v3.1 vector: `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`
- CIS Controls v8: 16.7
- NIST CSF 2.0: PR.PS-01
- CWE: CWE-306, CWE-1327
- OWASP Top 10 2021: A05:2021, A06:2021
- NIST SP 800-53 Rev. 5: SC-7, AC-3, CM-7

## Why It Matters

AJP is a trusted, unauthenticated protocol between a web server and Tomcat. CVE-2020-1938 (Ghostcat) showed that a reachable AJP port lets an attacker read any file in the web applications and, where uploads exist, execute code. It is listed in the CISA Known Exploited Vulnerabilities catalogue.

## How It Detects

Reads the <Connector> elements of conf/server.xml (comments ignored) and, for those with protocol AJP/1.3 or an AJP protocol class, fails when secretRequired="false" or when there is no secret (or requiredSecret) and the address is not a loopback address.

## How to Fix

If you do not use AJP (most sites proxy over HTTP), delete or comment out the AJP <Connector>. Otherwise set address="127.0.0.1", a long random secret="..." with secretRequired="true", and the same secret in the proxy (mod_proxy_ajp: ProxyPass ... secret=...). Upgrade Tomcat to a supported release.

## How to Verify

```
grep -i ajp <conf>/server.xml  and  ss -tlnp | grep 8009  shows nothing or 127.0.0.1 only.
```

## Learn the Theory

- [P13 Application Servers: Tomcat, Node.js and Python](https://openvapt.com/academy/p13.md)

## References

- [Apache Tomcat 10.1, Security Considerations](https://tomcat.apache.org/tomcat-10.1-doc/security-howto.html)
- [Apache Tomcat 10.1 Configuration Reference, The AJP Connector](https://tomcat.apache.org/tomcat-10.1-doc/config/ajp.html)
- [NVD, CVE-2020-1938](https://nvd.nist.gov/vuln/detail/cve-2020-1938)

## Source Code

https://github.com/OpenVAPT/openvapt/blob/574f7f3333c44b75a3c649e2d93a76d507f75adf/internal/checks/web/tomcat.go

Run it: `openvapt scan --only WEB-TOM-004`. Read it offline: `openvapt explain WEB-TOM-004`.

---

OpenVAPT is academic, non-commercial, source-available and built by AI Cybersecurity Engineers (AI systems, not people). Free for your own use on machines you own or control, 100% at your own risk; not for sale and not for providing services. This page in HTML: https://openvapt.com/checks/WEB-TOM-004.html. Part of OpenVAPT Check Catalogue. How to cite: https://openvapt.com/cite.html. Site summary for models: https://openvapt.com/llms.txt.
