This is an automated email from the ASF dual-hosted git repository.
vinishjail97 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-xtable.git
The following commit(s) were added to refs/heads/main by this push:
new 9d9f9b3c [MINOR] Add a security policy and a threat model (#966)
9d9f9b3c is described below
commit 9d9f9b3ced22adea03001b4b5e547b51fa7c8adc
Author: Vinish Reddy <[email protected]>
AuthorDate: Mon Oct 19 23:40:19 2026 +0530
[MINOR] Add a security policy and a threat model (#966)
Add SECURITY.md, which routes vulnerability reports to the ASF
security process, and THREAT_MODEL.md, which states what the project
treats as a vulnerability, what is out of scope, and how reports are
triaged.
---
SECURITY.md | 59 ++++++++++++++
THREAT_MODEL.md | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 291 insertions(+)
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 00000000..b59a7f8d
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,59 @@
+<!--
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements. See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership. The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License. You may obtain a copy of the License at
+ -
+ - http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied. See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -->
+
+# Security Policy
+
+## Reporting a vulnerability
+
+Please do not report security vulnerabilities through public GitHub issues,
pull
+requests, or mailing lists.
+
+Report suspected vulnerabilities privately to [email protected], following
the
+[ASF vulnerability reporting process](https://www.apache.org/security/). The
ASF security
+team will forward the report to the Apache XTable (Incubating) PPMC, who will
+acknowledge it, assess it, and coordinate a fix and disclosure.
+
+A useful report includes:
+
+- the XTable version or commit,
+- how XTable was run (`RunSync`, `RunCatalogSync`, or as a library) and the
source and
+ target formats involved,
+- the steps or crafted input needed to reproduce the issue, and
+- the security property from [THREAT_MODEL.md](THREAT_MODEL.md) that the issue
breaks.
+
+## What counts as a vulnerability
+
+[THREAT_MODEL.md](THREAT_MODEL.md) states what the project treats as a
vulnerability,
+what it treats as out of scope, and how the PPMC classifies reports. Please
read it
+before filing. Reports that match its out-of-scope or known non-finding
sections may be
+answered with a pointer to that document.
+
+In particular, `xtable-service` is a developer utility with no authentication,
and
+exposing it to an untrusted network is not a supported use.
+
+## Supported versions
+
+Security fixes are made on `main` and ship in the next release. The latest
release is
+listed at https://xtable.apache.org/releases/downloads/. Whether a fix is also
backported
+to an earlier release line is decided by the PPMC for each issue.
+
+## Other issues
+
+For defects that are not security-sensitive, open an issue at
+https://github.com/apache/incubator-xtable/issues.
diff --git a/THREAT_MODEL.md b/THREAT_MODEL.md
new file mode 100644
index 00000000..54fb54d8
--- /dev/null
+++ b/THREAT_MODEL.md
@@ -0,0 +1,232 @@
+<!--
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements. See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership. The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License. You may obtain a copy of the License at
+ -
+ - http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied. See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -->
+
+# Apache XTable (Incubating) Threat Model
+
+Status: v1 draft, pending PPMC review.
+Applies to: `main` (0.5.0-SNAPSHOT) and all released versions.
+
+This document states what the Apache XTable (Incubating) project treats as a
security
+vulnerability, and what it does not. It exists so that reporters, users and
the PPMC
+work from the same understanding of intended use before a report is filed. The
ASF calls
+this a project security model; see
+[Documenting your security
model](https://cwiki.apache.org/confluence/spaces/SECURITY/pages/308153000/Documenting+your+security+model).
+
+It is a triage contract, not a security audit and not a design document. If
you believe
+you have found a vulnerability, see [Reporting](#reporting) below. Please do
not open a
+public issue for suspected vulnerabilities.
+
+## 1. What XTable is
+
+XTable translates the metadata that describes a table -- schema, partitioning,
file
+listings, column statistics and snapshot history -- between table formats,
without
+rewriting or copying the underlying data files.
+
+- **Sources:** Apache Hudi, Apache Iceberg, Delta Lake (through Delta
Standalone or Delta
+ Kernel), Apache Paimon, and plain Parquet datasets.
+- **Targets:** Apache Hudi, Apache Iceberg, and Delta Lake (through Delta
Standalone or
+ Delta Kernel).
+- **Catalogs:** XTable can read a source table through an Iceberg catalog, and
can
+ register converted tables in AWS Glue or a Hive Metastore.
+
+XTable is a **batch tool run by an operator against storage that operator
controls**. The
+supported ways to run it are:
+
+- the `xtable-utilities` bundle jar, through `RunSync` (table conversion) or
+ `RunCatalogSync` (catalog synchronization), driven by YAML configuration
files. The
+ project does not publish this jar or a container image; operators build it
from
+ source, and the root `Dockerfile` is a build recipe, not a published
artifact,
+- as a library on the JVM (`xtable-api`, `xtable-core` and the catalog modules
+ `xtable-aws` and `xtable-hive-metastore`).
+
+`RunSync` can loop in continuous mode, but it opens no network port. XTable is
not a
+network service and not a multi-tenant system. It runs with the storage and
catalog
+credentials the operator gives it, and acts on the paths the operator
configures.
+
+The repository also contains `xtable-service`, a Quarkus HTTP wrapper around
the
+conversion API. It is a developer utility, not a supported way to run XTable.
See
+section 4.1.
+
+## 2. Trust boundaries
+
+**Trusted inputs.** The dataset configuration, the Hadoop configuration, the
Iceberg
+catalog configuration, the conversion and catalog configuration, CLI arguments,
+environment variables and credentials, the catalog endpoints named in
configuration, the
+local filesystem, the JVM classpath, and the identity of the process. Whoever
supplies
+these is the operator, and is trusted completely. XTable does not attempt to
defend
+against the person who invoked it.
+
+**Untrusted input, in scope.** The *bytes* of table metadata and data files
that XTable
+reads from storage. This covers the source table, and the existing target
table that
+XTable reads back during an incremental sync. An operator may legitimately
convert a
+table written by someone else, so crafted table content that escapes the
conversion
+boundary is a real concern.
+
+**Not a trust boundary.** The `xtable-service` HTTP port. There is no security
boundary
+at that port and none is claimed. See section 4.1.
+
+## 3. In scope
+
+The following are treated as valid vulnerabilities:
+
+1. **Escape from the conversion boundary via crafted table content.** Table
metadata,
+ manifests, logs or data file footers that cause XTable to:
+ - write or delete anything outside the configured target table's metadata
location,
+ - execute attacker-controlled code, for example through unsafe
deserialization,
+ polymorphic type handling, XXE, or archive path traversal, or
+ - write to a table, catalog or catalog entry other than the configured one.
+2. **Credential disclosure.** Storage or catalog credentials written into
logs, exception
+ messages, converted table metadata, catalog entries, or any other output.
+3. **Writing to an unintended target.** Conversion or catalog sync that writes
to a table,
+ path or catalog other than the one configured, for reasons other than
crafted input.
+4. **Vulnerable dependencies reachable in documented use**, including
dependencies shaded
+ into the published jars.
+5. **Integrity of published release artifacts** -- signatures, checksums, and
the contents
+ of the source release and of the artifacts on Maven Central.
+
+## 4. Out of scope (explicit non-goals)
+
+The following are **not** treated as vulnerabilities in XTable:
+
+1. **`xtable-service` reachable from an untrusted network.** `xtable-service`
is a
+ developer utility for exercising the conversion API locally. It has no
authentication
+ or authorization layer. Its README states this deployment scope. It is not
described in
+ the user documentation at https://xtable.apache.org, there is no accepted
design making
+ it a deployable service, and the project publishes no container image,
hardened
+ configuration, or deployment guidance for it. Exposing it on a network
reachable by
+ untrusted parties is unsupported. Any client that can reach the port can
start a
+ conversion against any path the service credentials can read or write. If
you choose
+ to run it beyond loopback, placing authentication in front of it is your
+ responsibility.
+2. **Any finding that requires the operator to deliberately expose a
credential-loaded
+ XTable process or port.** XTable holds whatever privileges the operator
grants it;
+ exposing that process is outside its intended use.
+3. **Class names in configuration.** Configuration may name Java classes that
XTable
+ loads by reflection, for example a conversion source provider, a partition
value
+ extractor, an Iceberg catalog implementation, or an AWS client or
credentials provider.
+ Loading the class the operator names is intended behaviour.
+4. **Data file references in source metadata.** Table formats allow a table to
reference
+ data files outside its base path, for example an Iceberg table with
`write.data.path`
+ set, or with files added by `add_files`. XTable carries these references
into the
+ target as absolute paths, and may open a referenced Parquet file to read
its footer
+ statistics. XTable does not check that a referenced file belongs to the
table. A
+ source table can therefore name any file the XTable credentials can read,
and that
+ file's path, row count and column statistics can appear in the target
metadata. Use
+ credentials scoped to the tables you convert; see section 6.
+5. **The `demo/` directory and docker playground assets.** These are
development fixtures.
+ Default or absent credentials in them are expected.
+6. **The operator's own IAM, storage and catalog permissions.** Over-broad
credentials
+ granted to the XTable process are a deployment concern, not an XTable
defect.
+7. **XTable acting on paths the operator configured.** XTable writes where it
is told,
+ using the identity it is given. That is the entire function of the tool.
+8. **Resource exhaustion from large or pathological tables.** XTable does not
bound the
+ work implied by its input.
+9. **Vulnerabilities in Apache Hudi, Apache Iceberg, Delta Lake, Apache
Paimon, Apache
+ Parquet, Apache Spark, Apache Hadoop, the AWS SDK, Quarkus or other upstream
+ projects.** Please report these to the responsible project. We will help
route a
+ report if it is unclear where it belongs. A flaw in upstream code that
XTable reaches
+ only through documented use is in scope under section 3.4.
+10. **Findings that presuppose the attacker already has code execution or
filesystem
+ access as the XTable process user, or can modify the JVM classpath.**
+
+## 5. Security properties XTable does NOT provide
+
+Stated plainly, so they are not mistaken for defects:
+
+- No authentication or authorization on `xtable-service`.
+- No sandboxing or isolation of table content beyond ordinary parsing.
+- No check that a data file referenced by table metadata belongs to that table.
+- No isolation between a caller and the credentials the XTable process holds.
+- No multi-tenancy. One XTable process serves one operator's intent.
+- No bound on the time, memory or I/O a conversion may consume.
+
+## 6. Operator responsibilities
+
+- Run `xtable-service` on loopback, or only within a network you control, and
put your own
+ authentication in front of it if you expose it at all. In Quarkus production
mode the
+ HTTP server listens on all interfaces unless `quarkus.http.host` is set.
+- Grant the XTable process only the storage and catalog permissions its
conversions need.
+ Do not give it read access to data that the source table's writers must not
see.
+- Convert tables from storage you trust, or run the conversion in an isolated
environment.
+- Keep XTable current, and monitor upstream advisories for the table formats
and catalogs
+ you use.
+
+## 7. Known non-findings
+
+Reports matching these have been considered and are dispositioned as noted:
+
+- **`POST /v1/conversion/table` on `xtable-service` requires no
authentication.**
+ `KNOWN-NON-FINDING`, out of model per section 4.1. Reported privately in
July 2026 and
+ assessed by the PPMC.
+- **`xtable-service` listens on all interfaces by default.**
`VALID-HARDENING`. Not a
+ vulnerability in a developer utility, but a loopback default is welcome as
an ordinary
+ pull request.
+- **`spec/rest-service-open-api.yaml` documents a `403` response that the
implementation
+ never returns.** `VALID-HARDENING`. A contract defect, handled as an
ordinary bug, not a
+ vulnerability.
+- **XTable writes converted metadata to a path supplied by the caller.**
`BY-DESIGN`, per
+ sections 2 and 4.7.
+- **XTable instantiates a class named in configuration.** `BY-DESIGN`, per
section 4.3.
+- **A converted table references, or carries statistics from, a file outside
the source
+ table's base path.** `BY-DESIGN`, per section 4.4.
+- **Demo fixtures contain default credentials.** `KNOWN-NON-FINDING`, per
section 4.5.
+
+## 8. Triage dispositions
+
+The PPMC classifies reports using these labels:
+
+- `VALID` -- a vulnerability against a property in section 3. Handled under
the ASF
+ security process, with a CVE where warranted.
+- `VALID-HARDENING` -- a real defect worth fixing that does not breach a
claimed security
+ property. Fixed in the open as an ordinary issue, no CVE, no embargo.
+- `OUT-OF-MODEL` -- accurate observation, outside the scope in section 4.
+- `BY-DESIGN` -- the described behaviour is the tool's intended function.
+- `KNOWN-NON-FINDING` -- previously considered and recorded in section 7.
+
+## 9. Conditions that would change this model
+
+Section 4.1 depends on `xtable-service` remaining a developer utility, and
section 1
+depends on XTable having no supported network surface. This model must be
revised if any
+of the following happens:
+
+- the REST service RFC (pull request #702) is accepted and `xtable-service`
becomes a
+ supported deployment target,
+- the web UI and asynchronous conversion API for `xtable-service` (pull
requests #945 and
+ #946) are merged,
+- a container image, hosted distribution or production deployment guide for
+ `xtable-service` is published,
+- `xtable-service` is documented on https://xtable.apache.org as a deployable
service,
+- `xtable-service` gains an authentication layer, at which point its
correctness becomes a
+ claimed security property,
+- XTable ships a network-facing agent interface, such as the MCP surface
proposed in
+ issue #891, or
+- a new supported way to run XTable is added, such as the
`xtable-spark-runtime` bundle
+ proposed in pull request #964.
+
+Anyone proposing such a change should update this document in the same pull
request.
+
+## Reporting
+
+Report suspected vulnerabilities privately to [email protected], following
the
+[ASF vulnerability reporting process](https://www.apache.org/security/). Do
not open a
+public GitHub issue. Reports covered by section 4 or section 7 may be answered
with a
+pointer to this document.
+
+For defects that are not security-sensitive, including anything listed in
section 7,
+please open a normal issue at
https://github.com/apache/incubator-xtable/issues.