Siemens takes the security of its code seriously. If you think you have found a security vulnerability, please read the next sections and follow the instructions to report your finding.
Please DO NOT report any potential security vulnerability via a public channel (mailing list, GitHub issue, etc.). Instead, report the vulnerability privately via GitHub (if enabled for the repository) or contact us via email.
Please provide a detailed description of the issue, the steps to reproduce it, the affected version(s) and, if already available, a proposal for a fix. Include a proof of concept that demonstrates the issue through the public API of a published package. You should receive a response within 5 working days. If for some reason you do not, please follow up via email to ensure we received your original message.
If we confirm the issue as a vulnerability, we will publish an advisory (e.g. on GitHub) and give credits for your report if desired. We follow the coordinated vulnerability disclosure model and will define an appropriate disclosure timeline together with you.
Each major version of Element is built for one major version of Angular, as defined by the @angular/core peer
dependency of the packages. We provide security fixes for an Element major version as long as the corresponding Angular
major version is supported according to the Angular support policy.
Angular currently supports each major version for 24 months (12 months active, 12 months long-term support).
Please check the actively supported Angular versions
to find out which Element versions are supported.
Element version 50 was skipped and has never been released.
| Element | Angular |
|---|---|
| 51.x | 22.x |
| 49.x | 21.x |
| 48.x | 20.x |
This is the security policy for the siemens/element repository on GitHub.com.
This repository contains the published Element libraries plus the infrastructure needed to document, demo and release them.
Security reviews, including automated and AI-assisted scans, should focus on the library code, as this is the code
that ends up in applications built with Element.
The following packages are published to npm and consumed by applications:
projects/charts-ng(@siemens/charts-ng)projects/dashboards-ng(@siemens/dashboards-ng)projects/element-ng(@siemens/element-ng)projects/element-theme(@siemens/element-theme)projects/element-translate-cli(@siemens/element-translate-cli)projects/element-translate-ng(@siemens/element-translate-ng)projects/live-preview(@siemens/live-preview, used to render documentation examples)projects/map-styles(@siemens/map-styles)projects/maps-ng(@siemens/maps-ng)projects/native-charts-ng(@siemens/native-charts-ng)
Test files (*.spec.ts) inside these folders are not shipped and are out of scope.
Everything else is mainly documentation, demo and build setup and is not part of the shipped libraries, for example:
docs/,mkdocs.ymlandprojects/element-docs-builder(documentation site)src/(example app and the examples shown in the documentation)projects/dashboards-demoandprojects/icon-viewer(demo applications)playwright/,tools/,api-goldens/,skills/and.github/(tests, release tooling and CI)
The documentation infrastructure and demo apps intentionally use patterns such as innerHTML with content that is fully
controlled by this repository (e.g. generated during the build or deployed by our release pipeline). This content is
controlled through pull request reviews. Findings that require an attacker to change this content in the repository or on
our hosting infrastructure are not considered vulnerabilities. If you fork this repository and deploy the documentation
or demos yourself, you are responsible for controlling this content.
The following points are known and documented. They are not considered vulnerabilities and should not be reported again.
- Documentation version selector (
versions.json): The documentation site loadsversions.jsonfrom the root of the hosting domain and renders the version selector viainnerHTML(docs/_src/version-selector.js). The file is generated and uploaded by our release pipeline and is trusted. Anyone hosting the documentation must make sure this file cannot be modified by untrusted parties.
Some library APIs intentionally hand control to the application. Applications using Element are responsible for handling them securely. Details are documented next to the respective API:
- Markdown custom extensions: Built-in Markdown rendering sanitizes inline HTML. Custom extensions and directive
components provided by the application control their own rendering. If they bypass Angular sanitization
(e.g.
bypassSecurityTrustHtml), the application must ensure the content is safe. See Markdown. - Markdown Mermaid extension: The SVG generated by Mermaid is rendered as trusted HTML. Sanitization relies on
Mermaid's
securityLevel(defaultstrict). Applications that pass a less strictsecurityLevelviasiMarkdownMermaid()must only render trusted content. See Markdown. - HTML string inputs: Some inputs accept HTML strings and render them via
[innerHTML], e.g.popoverof the legacysi-popover,passwordPolicyContentofsi-change-password,implicitLegalAcknowledgeofsi-landing-pageandMapPoint.descriptionin@siemens/maps-ng. Angular sanitizes these values. Applications must not pass untrusted content that was marked as trusted (e.g. viabypassSecurityTrustHtml). See Landing page, Element maps and the API documentation of the deprecatedsi-popover. - Trusted URLs:
licenseInfo.iframeofsi-aboutandsourcePhotoUrlofsi-photo-uploadare marked as trusted resource URLs and are not sanitized by Angular. Applications must only pass URLs from trusted sources. See About and Photo upload. - Chart tooltip formatters: Built-in tooltip formatters in
@siemens/charts-ngescape names and values. Custom ECharts formatters provided by the application must escape untrusted values (e.g. withecharts.format.encodeHTML). See Generic chart. - Dashboard remote widgets: Widgets in
@siemens/dashboards-ngcan be loaded via Module Federation, Native Federation or as web components from a URL. This executes the loaded code in the application. Applications must only register widget factories that point to trusted sources. See Flexible dashboards. - Content Security Policy for SVG icons: Element embeds icons as
data:image/svg+xmlURLs, so applications must allow thedata:scheme forimg-srconly. See Icons.
In addition to the known considerations above, the following reports are not considered vulnerabilities:
- Misuse of APIs listed under Responsibilities of application developers.
- Vulnerabilities in peer dependencies (e.g. Angular, ECharts, Mermaid). The application installs and updates these packages, so please report them to the respective upstream project. Reports are in scope if a published package uses a peer dependency in an insecure way. Vulnerabilities in direct dependencies of a published package are in scope.
- Vulnerabilities in dependencies that are only used for building, testing or the documentation, as they are not part of the published packages.
- Missing security headers or Content Security Policy on the documentation site or demo applications.
- Theoretical findings from automated or AI-assisted scans without a proof of concept that demonstrates the issue through the public API of a published package.
When adding or changing an API that hands security responsibility to the application, document it as follows:
| Content | Location |
|---|---|
| Scope, reporting process and accepted risks | This file |
| Secure usage of an API (sanitization, trusted content, CSP) | Component documentation in docs/ and the API docs, next to the API |
| Index of points application developers are responsible for | This file, as a short entry linking to the component documentation |
Keep entries in this file short and link to the detailed documentation instead of duplicating it.