CVE-2020-13846High· 7.5▾ Twilight"Verify All" Returns Success Despite Validation Failures in Singularity
▾ Twilight zone — High severity, or a signal on a lesser flaw
impact 41.3 · likelihood 0.3 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Jul 9.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
1.3%
The --all / -a option to singularity verify returns success even when some objects in a SIF container are not signed, or cannot be verified.
The SIF objects that are not verified are reported in WARNING log messages, but a Container Verified message and exit code of 0 are returned.
Workflows that verify a container using --all / -a and use the exit code as an indicator of success are vulnerable to running SIF containers that have unsigned, or modified, objects that may be exploited to introduce malicious behavior.
$ singularity verify -a image.sif
WARNING: Missing signature for SIF descriptor 2 (JSON.Generic)
WARNING: Missing signature for SIF descriptor 3 (FS)
Container is signed by 1 key(s):
Verifying partition: Def.FILE:
12045C8C0B1004D058DE4BEDA20C27EE7FF7BA84
[LOCAL] Unit Test <[email protected]>
[OK] Data integrity verified
INFO: Container verified: image.sif
$ echo $?
0
Singularity 3.6.0 has a new implementation of sign/verify that fixes this issue.
All users are advised to upgrade to 3.6.0. Note that Singularity 3.6.0 uses a new signature format that is necessarily incompatible with Singularity < 3.6.0 - e.g. Singularity 3.5.3 cannot verify containers signed by 3.6.0.
Version 3.6.0 includes a --legacy-insecure flag for the singularity verify command, that will perform verification of the older, and insecure, legacy signatures for compatibility with existing containers. This does not guarantee that containers have not been modified since signing, due to other issues in the legacy signature format.
If you are unable to update to 3.6.0 ensure that you do not rely on the return code of singularity verify --all / -a as an indicator of trust in a container.
Note that other issues in the sign/verify implementation in Singularity < 3.6.0 allow additional means to introduce malicious behavior to a signed container.
General questions about the impact of the advisory / changes made in the 3.6.0 release can be asked in the:
Any sensitive security concerns should be directed to: [email protected]
See our Security Policy here: https://sylabs.io/security-policy
github.com/sylabs/singularity >= 3.5.0, < 3.6.0Upgrade to a patched release:
github.com/sylabs/singularity 3.6.0Connected by shared product, vendor, weakness, or advisory.
CVE-2020-13845High· 7.5Execution Control List (ECL) Is Insecure in Singularity
CVE-2020-25040High· 8.8Insecure permissions on build temporary rootfs in Singularity
CVE-2021-32635Medium· 6.3Action Commands (run/shell/exec) Against Library URIs Ignore Configured Remote Endpoint
CVE-2020-15229High· 8.2Path traversal and files overwrite with unsquashfs in singularity
CVE-2021-29499High· 7.5Predictable SIF UUID Identifiers in github.com/sylabs/sif
CVE-2026-47215Medium· 4.8SingularityCE and SingularityPRO are open source container platforms