Skip to content

Security: lestrrat-go/helium

Security

SECURITY.md

Security Policy

Supported Versions

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.

Secure by Default

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.

Scope

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.DirFS blocks ..//absolute-path escape but FOLLOWS an in-root symlink out of its root, so it is not a symlink sandbox. Use os.Root.FS for symlink-safe confinement, or the deny-all default to load nothing. PermissiveFS is 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.

Reporting a Vulnerability

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.

There aren't any published security advisories