Security fixes are applied to the latest released version and the main branch.
Older versions are not maintained — if you are on an older release, please upgrade
to pick up security fixes.
helium's parser is secure by default: NewParser() is safe to point at
untrusted XML with no extra configuration — external entity and DTD loading is
blocked (XXE-safe), the filesystem is deny-all, network access is forbidden,
nesting depth is bounded, and entity-expansion amplification is guarded. The
XInclude processor and the XSD schema compiler are likewise deny-all by default.
See the Security section of the README for the full posture, how to opt into loading external resources from trusted sources, and the resource-budget responsibilities (maximum document size, context deadlines) that remain with the caller.
The following are not treated as vulnerabilities:
- Insecure behavior that results from deliberately relaxing the safe defaults —
e.g.
BlockXXE(false),LoadExternalDTD(true),SubstituteEntities(true),FS(helium.PermissiveFS()), or removing the entity-amplification, name-length, or content-model-depth guards. Opting out of a protection is the caller's responsibility. - The documented symlink caveat for a directory-rooted
fs.FS(see the README Security section):os.DirFSblocks..//absolute-path escape but FOLLOWS an in-root symlink out of its root, so it is not a symlink sandbox. Useos.Root.FSfor symlink-safe confinement, or the deny-all default to load nothing.PermissiveFSis an explicit opt-out of confinement.
The xmldsig1 package has scoped production support for explicit same-document
verification profiles when the application supplies an explicit trusted key or
certificate source and checks which element the verified signature covers. External
references and XSLT are opt-in advanced features with caller-owned transport,
resource, and execution policy.
The xmlenc1 (XML Encryption) package has scoped production support for W3C XML
Encryption 1.1. It uses authenticated AES-GCM by default, refuses retired Triple
DES algorithms, and requires explicit opt-in for CBC and external cipher
references. Callers should review their deployment's security and compliance
requirements.
If you think you found a vulnerability, please report it via GitHub Security Advisory. Please include explicit steps to reproduce the security issue.
We will do our best to respond in a timely manner, but please also be aware that this project is maintained by a very limited number of people. Please help us with test code and such.