Security
Last updated Jul 24, 2026
Velum Privacy for Jira and Confluence is a security product, so the smallest attack surface we can ship is the one that never holds your data. The app runs entirely on Atlassian Forge. There is no vendor-operated server, database, or backup that contains customer content. Detection, masking and erasure all run inside your own Atlassian tenant. A compromise of Velum cannot expose your Jira or Confluence data, because we never hold it.
To report a vulnerability, email security@su.engineering.
Architecture
Velum Privacy is Forge-native. There is no Forge Remote, no vendor backend, and no third-party AI service in the request path.
- PII detection runs in-process: a regular-expression engine plus an on-device
NER model executing under
onnxruntime-web(WASM) inside the Forge function. - All persistence uses Forge app storage, scoped to your installation. App data is deleted when you uninstall.
- The only outbound request is a one-time download of the public, static AI model file from the Hugging Face CDN at cold start. It carries no customer content, and the two permitted hosts are declared in the app manifest. Forge blocks everything else at the platform level.
Your content never leaves your Atlassian instance.
Data protection
- Encryption at rest. Atlassian platform encryption on all Forge storage.
- Reversal keys. The token-to-value mapping that makes masking reversible is additionally encrypted with AES-256-GCM at the application layer, keyed by a Forge encrypted variable, on top of platform encryption.
- Encryption in transit. TLS 1.2 or above on all requests.
- Tenant isolation. Storage is scoped per installation. No cross-tenant data path exists.
- Credentials. The app collects no Atlassian or third-party credentials and holds no secrets of its own. Forge issues its runtime authentication.
Access control
Authorization is evaluated per product and per method. Every backend method that reads or changes findings, audit records, reversal keys or configuration verifies that the caller administers the Atlassian product the content belongs to: a Jira administrator manages Jira findings, a Confluence administrator manages Confluence findings, and neither sees the other's. Changing detection policy, which governs scanning in both products, requires administrator rights in both.
UI placement is not treated as an authorization boundary. The checks live in the backend, where they cannot be bypassed by calling the app directly.
Admin-initiated content changes execute as the requesting user, so the app's effective access never exceeds that administrator's own permissions. De-anonymization, the highest-risk operation, is admin-gated and audit-logged without exception.
Logging and audit
- The app maintains an in-tenant, append-only audit log of scans, masking, de-anonymization, configuration changes and administrative actions.
- Audit entries are scoped to the product they concern and visible only to an administrator of that product. Entries reference a data subject by salted hash, never by name or email.
- Detected values, credentials and access tokens are never written to platform logs. This is enforced by review on every change.
GDPR
Velum Privacy includes GDPR Article 17 tooling. Locate every occurrence of a data subject across Jira and Confluence, export an audit-ready report, then erase them. Erasure redacts the values in the content itself, deletes the copies Velum stored, and destroys the reversal keys for those locations, so the removal cannot be undone. Because all data stays in your Atlassian instance, you remain the data controller.
Secure development
- Source is held in a private repository; access requires multi-factor authentication.
- Dependencies are reviewed against published advisories; the tree is almost entirely Atlassian's own Forge SDK, and upstream advisories are tracked and shipped when Atlassian releases a fix.
- The app requests the narrowest scopes its functionality allows. Every new scope requires written justification before release.
- The OWASP Top 10 is the reference for security review of application changes.
Vulnerability disclosure
If you believe you have found a security vulnerability, report it to security@su.engineering with enough detail to reproduce it. We acknowledge reports within two business days and keep you updated until the issue is resolved. Please give us reasonable time to ship a fix before public disclosure. We will not pursue legal action against researchers who report in good faith and avoid privacy violations, data destruction or service disruption while testing.
Vulnerabilities may also be reported through Atlassian's Marketplace Security channel. Remediation follows the Atlassian Marketplace security bug fix policy timelines.
Incident response
We maintain a documented incident response plan covering triage, severity classification, containment, remediation and notification. If an incident affects your data, we notify affected installations within 72 hours of confirming impact, using Atlassian's partner notification templates, and notify Atlassian in parallel. Where facts are still uncertain, we say so rather than issue reassurance the evidence does not support.
Compliance
su.engineering does not currently hold ISO 27001, SOC 2 or PCI certification. We would rather state that plainly than imply otherwise. The app's security posture rests on architecture, no vendor-side data, and on the controls described above, and is reviewed at least annually.
Other Velum products
Everything above concerns Velum Privacy for Jira and Confluence. Velum ships the same engine across other surfaces, each with its own posture. They share one principle with the Atlassian app: your content never reaches a vendor server.
Endpoint apps (browser extension, desktop, CLI)
- No network in the masking path. Models are bundled or cached locally, remote model loading is disabled, and this is enforced in the build by a static scan and a runtime network-block test. The desktop app's only outbound calls are an update check on launch and the optional one-time model download; neither carries document text, and the app names both on its own Protection page.
- Mappings stay on the device. They are encrypted at rest with AES-256-GCM, the key held in the OS keychain, or kept in memory only and discarded on quit, at the user's choice.
- Unmasking is never gated, not even by licensing, so nothing already masked is ever locked away. Licence keys are signed offline and verified locally; even the billing path contacts no server at runtime.
Embedded loopback service
Runs as a local sidecar bound to 127.0.0.1. Internal applications call
POST /mask and POST /unmask. Mappings are held in memory only, loopback-bound
and expiring, and are never persisted, so the "no sensitive data at rest"
property holds for the AI features you build on it.
Source-available engine
The detection-and-masking core is source-available under the PolyForm
Noncommercial licence, published to npm as @velumprivacy/* on request, so your
security team can read exactly what runs on your data. Diagnostics and usage logs
contain counts and timings only, never document text. To report a vulnerability
in any Velum product, email security@su.engineering.