This is an automated email from the ASF dual-hosted git repository.
jungm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/main by this push:
new 6c06712eb8 initial AGENTS.md/SECURITY.md
6c06712eb8 is described below
commit 6c06712eb86835821b48d5d58bfc065d10e61ad5
Author: Markus Jung <[email protected]>
AuthorDate: Sun May 17 16:49:31 2026 +0200
initial AGENTS.md/SECURITY.md
---
AGENTS.md | 3 ++
SECURITY.md | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 121 insertions(+)
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000000..922fc03031
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,3 @@
+## Security
+
+See [SECURITY.md](SECURITY.md) — the linked security model for the project's
threat model, in-scope / out-of-scope declarations, and known non-findings
before reporting issues.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000000..6cb48ec3a4
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,118 @@
+# Apache TomEE — Security Model
+
+Apache TomEE is a Jakarta EE and MicroProfile runtime. The Apache TomEE
Security Team reviews reported vulnerabilities against the security model
described below. Reports that fall outside it will be rejected.
+
+Report suspected vulnerabilities privately to **[email protected]**. Do not
file security reports as public Jira tickets or GitHub issues.
+
+## Administrative users
+
+Administrative users are always considered to be trusted. Reports for
vulnerabilities where an attacker already has access to or control over any of
the following will be rejected:
+
+- TomEE binaries and scripts (everything under a TomEE distribution's `bin/`
and `lib/`).
+- TomEE configuration (`conf/`, `conf/tomee.xml`, `conf/system.properties`,
`conf/server.xml`, `conf/conf.d/`, realm files, JAAS login configuration).
+- Log files (`logs/`).
+- The temp directory (by default `$CATALINA_BASE/temp`).
+- Application working directories (by default `$CATALINA_BASE/work`).
+- The TomEE-provided web applications shipped with the distribution (`tomee/`,
`webaccess/`, plus/plume admin UIs).
+- The JMX API (local or remote).
+- The Java Attach API or any other debugging or agent interface.
+- The OpenEJB `apps/` and `webapps/` deployment directories.
+- Resource definitions in `tomee.xml` / `resources.xml` (datasources,
connectors, services).
+
+Reports for vulnerabilities where an attacker tricks an administrative user
into performing an action the administrator did not intend (e.g. CSRF in the
bundled TomEE web applications) will be accepted.
+
+## Deployed applications
+
+Applications and modules deployed to TomEE — WARs, EARs, EJB-JARs, RARs — are
considered to be trusted. This applies whether they are dropped into `webapps/`
or `apps/`, deployed via the Deployer, installed by `tomee-maven-plugin`, or
embedded via `tomee-embedded`. It also covers:
+
+- Application-provided JAX-RS / JAX-WS endpoints (handled by CXF but
configured by the application).
+- Application-provided JMS clients and listeners.
+- Application-provided JPA entities and persistence units.
+- Application-provided CDI beans, interceptors, and decorators.
+
+Vulnerabilities in application code are application vulnerabilities, not TomEE
vulnerabilities.
+
+Applications that enable functionality permitting modification of the deployed
application (hot-deploy endpoints, WebDAV, HTTP `PUT`, custom upload handlers)
are expected to secure that functionality themselves. Failure to do so is an
application vulnerability, not a TomEE vulnerability.
+
+Reports against the TomEE-provided web applications shipped with standard
distributions from the ASF — the TomEE webapp, web console, REST admin
endpoints, `webaccess`, plus/plume admin UIs — will be accepted. Reporters
should review the *Security Considerations* notes in the documentation for the
version under test before filing.
+
+## Connectors and transports
+
+Data received via any TomEE-exposed connector or transport is considered to be
untrusted, regardless of protocol. This explicitly covers the OpenEJB
transports under `server/`:
+
+- `openejb-ejbd` — the EJBd binary protocol.
+- `openejb-http` — OpenEJB's HTTP transport for remote EJB and REST
invocations.
+- `openejb-hessian` — Hessian RPC transport.
+- `openejb-ssh` — SSH-based admin transport.
+- CXF-backed JAX-WS and JAX-RS endpoints exposed by TomEE itself (separate
from application-provided endpoints in the *Deployed applications* section).
+
+**EJBd Java-object deserialization.** The EJBd protocol deserializes Java
objects from clients by design — this is what the protocol is. Exposing EJBd on
an untrusted network without authentication and a deserialization filter is
misuse, not a TomEE vulnerability. An optional transport flag enables TLS, but
the default cipher suite is not authenticated; operators are responsible for
selecting authenticated cipher suites and configuring a JEP 290 deserialization
filter (`-Djdk.serialFilte [...]
+
+All clients — including reverse proxies and remote EJB clients using
`openejb-client` — are responsible for the consequences of the data they
present to TomEE. If a client presents a malformed request that TomEE processes
per the protocol specification, any security impact to the client is the
client's responsibility.
+
+## Embedded network services
+
+TomEE can be configured to start network-listening services beyond the main
HTTP and EJBd transports. Each is admin-enabled; when enabled, the following
services require a trusted network or explicit authentication, and exposing
them on an untrusted network without hardening is misuse, not a TomEE
vulnerability:
+
+- **Embedded databases with network listeners.** Derby Network Server
(`openejb-derbynet`) and HSQLDB Server (`openejb-hsql`) listen on TCP ports
when configured to do so. Operators are responsible for binding them to trusted
interfaces or enabling their authentication.
+- **Embedded ActiveMQ broker.** When `openejb-activemq` is configured with a
network connector (e.g. a `tcp://` transport), the broker accepts JMS client
connections. Operators are responsible for the broker's authentication,
authorization, and TLS configuration.
+- **JMX over RMI.** TomEE exposes JMX MBeans. When a remote JMX connector is
enabled, operators are responsible for its authentication and TLS
configuration. (See also *Administrative users*: an attacker who already has
JMX access is treated as administrative.)
+- **The SSH admin transport** (`openejb-ssh`). Already covered as a connector
in *Connectors and transports*; mentioned here for completeness because it is
also an admin control plane.
+
+Reports against any of these services that assume they should be safe to
expose on an untrusted network without authentication will be rejected.
+
+## Service discovery
+
+OpenEJB provides peer-to-peer service discovery between cluster nodes via two
mechanisms:
+
+- **Multipoint discovery** (`MultipointDiscoveryAgent` / `MultipointServer` in
`openejb-server`). TCP-based gossip between known peers.
+- **Multicast discovery** (`MulticastDiscoveryAgent`, `MulticastPulseAgent` in
`openejb-multicast`). UDP multicast for peer discovery on a local network.
+
+A trusted network is integral to this feature. Operators who need to run
discovery across an untrusted network are responsible for providing
transport-level protection (VPN, network segmentation, etc.) themselves.
+
+Reports against multipoint or multicast discovery that depend on the absence
of network-layer protection — including deserialization of cluster traffic,
peer impersonation, or message injection — will be rejected on the basis that a
trusted network is part of the deployment contract.
+
+## Bundled third-party libraries
+
+TomEE distributions bundle implementations of Jakarta EE and MicroProfile
specifications from upstream projects, including (non-exhaustive):
+
+- Apache CXF (JAX-RS, JAX-WS).
+- Apache ActiveMQ (JMS broker and client).
+- Apache MyFaces and Mojarra (Jakarta Faces).
+- Apache OpenJPA (Jakarta Persistence).
+- Apache BVal (Jakarta Validation).
+- HSQLDB and Apache Derby (embedded databases).
+- MicroProfile implementations (JWT, Config, etc.).
+
+TomEE owns only its **integration code** — the wiring that exposes these
libraries through TomEE's deployment model, configuration, and defaults (for
example, how `openejb-cxf-rs` integrates CXF with the EJB container, or how a
`<Resource>` in `tomee.xml` configures an ActiveMQ broker).
+
+Reports of vulnerabilities in TomEE's integration code are accepted. Reports
of vulnerabilities in the upstream library itself — independent of how TomEE
wires it in — are out of scope; they should be reported to the upstream
project's security contact.
+
+**TomEE-modified library code is in scope.** TomEE does not ship all bundled
libraries unmodified. Where TomEE forks an upstream class (e.g. the BCEL
`ConstantPool`/`ConstantPoolGen` fork under `openejb.shade.*`, the patched
Tomcat `ServerInfo`), plants a class in an upstream package to reach internals
(e.g. `org.apache.bval.jsr.job.ConstraintValidators`,
`org.apache.catalina.startup.OpenEJBContextConfig`), shades or relocates a
library under TomEE coordinates (e.g. `commons-dbcp2-shade` [...]
+
+If you are unsure whether a finding is in TomEE's integration code or in the
upstream library, send it to **[email protected]** and the team will route it.
+
+## Logging
+
+Security-sensitive information will not be logged with the default
configuration apart from anything included in the request URI.
+
+Security-sensitive information may be logged with modified logging
configurations, particularly when debug logging is enabled. Common examples in
TomEE deployments:
+
+- Raising OpenEJB log levels.
+- Enabling CXF request/response logging (JAX-RS / JAX-WS).
+- Turning on JPA SQL logging (e.g. OpenJPA `openjpa.Log`, Hibernate
`show_sql`).
+- Enabling JMS broker trace logging.
+
+The default logs are likely to contain personally identifiable information
(PII) such as the IP address of users.
+
+TomEE is not responsible for the content of log messages generated by deployed
applications.
+
+## Known non-findings
+
+The following non-findings are frequently reported despite being invalid under
the model above. Repeated reports of non-findings from any source will be
treated as spam and will result in all email from the source being blocked at
the ASF's border.
+
+1. Any report that depends on deserialisation of OpenEJB multipoint or
multicast discovery traffic — discovery requires a trusted network (see
*Service discovery*).
+2. Any report that depends on write access to an application's `docBase`, to
the OpenEJB `apps/` deployment directory, or to any other location already
controlled by an administrative user per the *Administrative users* section
above.
+3. Any report that depends on deploying a malicious application — deployed
applications are trusted (see *Deployed applications*).
+4. Any report against the EJBd protocol, JMX, the embedded ActiveMQ broker,
Derby Network Server, HSQLDB Server, or other management or admin endpoints
that assumes they should be safe to expose on an untrusted network without
authentication (see *Connectors and transports* and *Embedded network
services*).
+5. Any report against bundled third-party libraries — including but not
limited to CXF, ActiveMQ, MyFaces, Mojarra, OpenJPA, BVal, HSQLDB, Derby, and
MicroProfile implementations — where the root cause is in the upstream library
as released rather than in TomEE's integration code or in any code TomEE forks,
patches, shades, or byte-code-transforms (see *Bundled third-party libraries*).