CWE-295
AllowedImproper Certificate Validation
Abstraction: Base · Status: Draft
The product does not validate, or incorrectly validates, a certificate.
1911 vulnerabilities reference this CWE, most recent first.
GHSA-C8XP-8MF3-62H9
Vulnerability from github – Published: 2021-09-07 23:02 – Updated: 2021-09-03 21:40Any CA issuer in the RPKI can trick OctoRPKI prior to https://github.com/cloudflare/cfrpki/commit/a8db4e009ef217484598ba1fd1c595b54e0f6422 into emitting an invalid VRP "MaxLength" value, causing RTR sessions to terminate.
Impact
An attacker can use this to disable RPKI Origin Validation in a victim network (for example AS 13335 - Cloudflare) prior to launching a BGP hijack which during normal operations would be rejected as "RPKI invalid". Additionally, in certain deployments RTR session flapping in and of itself also could cause BGP routing churn, causing availability issues.
Patches
https://github.com/cloudflare/cfrpki/commit/a8db4e009ef217484598ba1fd1c595b54e0f6422
https://github.com/cloudflare/cfrpki/releases/tag/v1.3.0
For more information
If you have any questions or comments about this advisory: * Email us at security@cloudflare.com
{
"affected": [
{
"package": {
"ecosystem": "Go",
"name": "github.com/cloudflare/cfrpki"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.3.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2021-3761"
],
"database_specific": {
"cwe_ids": [
"CWE-295",
"CWE-787"
],
"github_reviewed": true,
"github_reviewed_at": "2021-09-03T21:40:39Z",
"nvd_published_at": "2021-09-09T14:15:00Z",
"severity": "HIGH"
},
"details": "Any CA issuer in the RPKI can trick OctoRPKI prior to https://github.com/cloudflare/cfrpki/commit/a8db4e009ef217484598ba1fd1c595b54e0f6422 into emitting an invalid VRP \"MaxLength\" value, causing RTR sessions to terminate. \n\n### Impact\n\nAn attacker can use this to disable RPKI Origin Validation in a victim network (for example AS 13335 - Cloudflare) prior to launching a BGP hijack which during normal operations would be rejected as \"RPKI invalid\". Additionally, in certain deployments RTR session flapping in and of itself also could cause BGP routing churn, causing availability issues.\n\n### Patches\nhttps://github.com/cloudflare/cfrpki/commit/a8db4e009ef217484598ba1fd1c595b54e0f6422\n\nhttps://github.com/cloudflare/cfrpki/releases/tag/v1.3.0\n\n### For more information\nIf you have any questions or comments about this advisory:\n* Email us at [security@cloudflare.com](security@cloudflare.com)\n",
"id": "GHSA-c8xp-8mf3-62h9",
"modified": "2021-09-03T21:40:39Z",
"published": "2021-09-07T23:02:18Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/cloudflare/cfrpki/security/advisories/GHSA-c8xp-8mf3-62h9"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-3761"
},
{
"type": "WEB",
"url": "https://github.com/cloudflare/cfrpki/pull/90"
},
{
"type": "WEB",
"url": "https://github.com/cloudflare/cfrpki/commit/a8db4e009ef217484598ba1fd1c595b54e0f6422"
},
{
"type": "WEB",
"url": "https://github.com/cloudflare/cfrpki/releases/tag/v1.3.0"
},
{
"type": "WEB",
"url": "https://pkg.go.dev/vuln/GO-2022-0246"
},
{
"type": "WEB",
"url": "https://www.debian.org/security/2022/dsa-5041"
},
{
"type": "PACKAGE",
"url": "github.com/cloudflare/cfrpki"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"type": "CVSS_V3"
}
],
"summary": "OctoRPKI lacks contextual out-of-bounds check when validating RPKI ROA maxLength values"
}
GHSA-C96X-RPM4-349P
Vulnerability from github – Published: 2026-04-27 21:31 – Updated: 2026-05-06 18:38When configured to use an SSL bundle, Spring Boot's Elasticsearch auto-configuration does not perform hostname verification when connecting to the Elasticsearch server.
Affected: Spring Boot 4.0.0–4.0.5; upgrade to 4.0.6 or later per vendor advisory.
{
"affected": [
{
"package": {
"ecosystem": "Maven",
"name": "org.springframework.boot:spring-boot-elasticsearch"
},
"ranges": [
{
"events": [
{
"introduced": "4.0.0"
},
{
"fixed": "4.0.6"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-40970"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": true,
"github_reviewed_at": "2026-05-06T18:38:23Z",
"nvd_published_at": "2026-04-27T19:16:52Z",
"severity": "MODERATE"
},
"details": "When configured to use an SSL bundle, Spring Boot\u0027s Elasticsearch auto-configuration does not perform hostname verification when connecting to the Elasticsearch server.\n\nAffected: Spring Boot 4.0.0\u20134.0.5; upgrade to 4.0.6 or later per vendor advisory.",
"id": "GHSA-c96x-rpm4-349p",
"modified": "2026-05-06T18:38:23Z",
"published": "2026-04-27T21:31:02Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-40970"
},
{
"type": "PACKAGE",
"url": "https://github.com/spring-projects/spring-boot"
},
{
"type": "WEB",
"url": "https://github.com/spring-projects/spring-boot/releases/tag/v4.0.6"
},
{
"type": "WEB",
"url": "https://spring.io/security/cve-2026-40970"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L",
"type": "CVSS_V3"
}
],
"summary": "Spring Boot\u0027s Elasticsearch auto-configuration doesn\u0027t perform hostname verification when connecting to the Elasticsearch server."
}
GHSA-C9FJ-RCG9-G5CF
Vulnerability from github – Published: 2022-05-17 05:37 – Updated: 2024-02-09 03:32The Certificate Trust Policy component in Apple Mac OS X before 10.6.8 does not perform CRL checking for Extended Validation (EV) certificates that lack OCSP URLs, which might allow man-in-the-middle attackers to spoof an SSL server via a revoked certificate.
{
"affected": [],
"aliases": [
"CVE-2011-0199"
],
"database_specific": {
"cwe_ids": [
"CWE-20",
"CWE-295"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2011-06-24T20:55:00Z",
"severity": "MODERATE"
},
"details": "The Certificate Trust Policy component in Apple Mac OS X before 10.6.8 does not perform CRL checking for Extended Validation (EV) certificates that lack OCSP URLs, which might allow man-in-the-middle attackers to spoof an SSL server via a revoked certificate.",
"id": "GHSA-c9fj-rcg9-g5cf",
"modified": "2024-02-09T03:32:55Z",
"published": "2022-05-17T05:37:17Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2011-0199"
},
{
"type": "WEB",
"url": "http://lists.apple.com/archives/security-announce/2011//Jun/msg00000.html"
},
{
"type": "WEB",
"url": "http://support.apple.com/kb/HT4723"
},
{
"type": "WEB",
"url": "http://www.securityfocus.com/bid/48447"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-C9P5-2JV2-63VV
Vulnerability from github – Published: 2022-05-24 19:11 – Updated: 2025-05-30 18:30On 2N Access Unit 2.0 2.31.0.40.5 devices, an attacker can pose as the web relay for a man-in-the-middle attack.
{
"affected": [],
"aliases": [
"CVE-2021-31399"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-08-13T13:15:00Z",
"severity": "MODERATE"
},
"details": "On 2N Access Unit 2.0 2.31.0.40.5 devices, an attacker can pose as the web relay for a man-in-the-middle attack.",
"id": "GHSA-c9p5-2jv2-63vv",
"modified": "2025-05-30T18:30:40Z",
"published": "2022-05-24T19:11:07Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-31399"
},
{
"type": "WEB",
"url": "https://cds.thalesgroup.com/en/tcs-cert/CVE-2021-31399"
},
{
"type": "WEB",
"url": "https://excellium-services.com/cert-xlm-advisory/cve-2021-31399"
},
{
"type": "WEB",
"url": "https://www.2n.cz/en_GB/products/ip-access-control/2n-access-unit-2"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-C9XV-56CC-GJW2
Vulnerability from github – Published: 2022-05-24 19:02 – Updated: 2022-05-24 19:02An issue was discovered in Prosody before 0.11.9. The undocumented dialback_without_dialback option in mod_dialback enables an experimental feature for server-to-server authentication. It does not correctly authenticate remote server certificates, allowing a remote server to impersonate another server (when this option is enabled).
{
"affected": [],
"aliases": [
"CVE-2021-32919"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-05-13T16:15:00Z",
"severity": "HIGH"
},
"details": "An issue was discovered in Prosody before 0.11.9. The undocumented dialback_without_dialback option in mod_dialback enables an experimental feature for server-to-server authentication. It does not correctly authenticate remote server certificates, allowing a remote server to impersonate another server (when this option is enabled).",
"id": "GHSA-c9xv-56cc-gjw2",
"modified": "2022-05-24T19:02:20Z",
"published": "2022-05-24T19:02:20Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-32919"
},
{
"type": "WEB",
"url": "https://blog.prosody.im/prosody-0.11.9-released"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/6MFFBZWXKPZEVZNQSVJNCUE7WRF3T7DG"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/GUN63AHEWB2WRROJHU3BVJRWLONCT2B7"
},
{
"type": "WEB",
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/LWJ2DG2DFJOEFEWOUN26IMYYWGSA2ZEE"
},
{
"type": "WEB",
"url": "https://security.gentoo.org/glsa/202105-15"
},
{
"type": "WEB",
"url": "https://www.debian.org/security/2021/dsa-4916"
},
{
"type": "WEB",
"url": "http://www.openwall.com/lists/oss-security/2021/05/13/1"
},
{
"type": "WEB",
"url": "http://www.openwall.com/lists/oss-security/2021/05/14/2"
}
],
"schema_version": "1.4.0",
"severity": []
}
GHSA-CC9P-JMCF-87W4
Vulnerability from github – Published: 2025-08-29 18:30 – Updated: 2025-09-19 18:31An improper certificate validation vulnerability has been reported to affect Qsync Central. If a remote attacker gains a user account, they can then exploit the vulnerability to compromise the security of the system.
We have already fixed the vulnerability in the following version: Qsync Central 4.5.0.7 ( 2025/04/23 ) and later
{
"affected": [],
"aliases": [
"CVE-2025-30278"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2025-08-29T18:15:40Z",
"severity": "HIGH"
},
"details": "An improper certificate validation vulnerability has been reported to affect Qsync Central. If a remote attacker gains a user account, they can then exploit the vulnerability to compromise the security of the system.\n\nWe have already fixed the vulnerability in the following version:\nQsync Central 4.5.0.7 ( 2025/04/23 ) and later",
"id": "GHSA-cc9p-jmcf-87w4",
"modified": "2025-09-19T18:31:21Z",
"published": "2025-08-29T18:30:53Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-30278"
},
{
"type": "WEB",
"url": "https://www.qnap.com/en/security-advisory/qsa-25-22"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
"type": "CVSS_V4"
}
]
}
GHSA-CCR5-HMVM-37Q5
Vulnerability from github – Published: 2024-11-27 06:30 – Updated: 2025-06-27 18:30An insufficient certification validation issue in the Palo Alto Networks GlobalProtect app enables attackers to connect the GlobalProtect app to arbitrary servers. This can enable a local non-administrative operating system user or an attacker on the same subnet to install malicious root certificates on the endpoint and subsequently install malicious software signed by the malicious root certificates on that endpoint.
GlobalProtect App for Android is under evaluation. Please subscribe to our RSS feed https://security.paloaltonetworks.com/rss.xml to be alerted to new updates to this and other advisories.
{
"affected": [],
"aliases": [
"CVE-2024-5921"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-11-27T04:15:14Z",
"severity": "HIGH"
},
"details": "An insufficient certification validation issue in the Palo Alto Networks GlobalProtect app enables attackers to connect the GlobalProtect app to arbitrary servers. This can enable a local non-administrative operating system user or an attacker on the same subnet to install malicious root certificates on the endpoint and subsequently install malicious software signed by the malicious root certificates on that endpoint.\n\nGlobalProtect App for Android is under evaluation. Please subscribe to our RSS feed https://security.paloaltonetworks.com/rss.xml to be alerted to new updates to this and other advisories.",
"id": "GHSA-ccr5-hmvm-37q5",
"modified": "2025-06-27T18:30:35Z",
"published": "2024-11-27T06:30:39Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-5921"
},
{
"type": "WEB",
"url": "https://blog.amberwolf.com/blog/2024/november/palo-alto-globalprotect---code-execution-and-privilege-escalation-via-malicious-vpn-server-cve-2024-5921"
},
{
"type": "WEB",
"url": "https://github.com/AmberWolfCyber/NachoVPN"
},
{
"type": "WEB",
"url": "https://security.paloaltonetworks.com/CVE-2024-5921"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:N/R:U/V:D/RE:M/U:Amber",
"type": "CVSS_V4"
}
]
}
GHSA-CCW8-7688-VQX4
Vulnerability from github – Published: 2021-09-08 20:14 – Updated: 2022-08-10 23:49HashiCorp Consul and Consul Enterprise 1.10.1 Raft RPC layer allows non-server agents with a valid certificate signed by the same CA to access server-only functionality, enabling privilege escalation. Fixed in 1.8.15, 1.9.9 and 1.10.2.
{
"affected": [
{
"package": {
"ecosystem": "Go",
"name": "github.com/hashicorp/consul"
},
"ranges": [
{
"events": [
{
"introduced": "1.10.1"
},
{
"fixed": "1.10.2"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"1.10.1"
]
},
{
"package": {
"ecosystem": "Go",
"name": "github.com/hashicorp/consul"
},
"ranges": [
{
"events": [
{
"introduced": "1.9.0"
},
{
"fixed": "1.9.9"
}
],
"type": "ECOSYSTEM"
}
]
},
{
"package": {
"ecosystem": "Go",
"name": "github.com/hashicorp/consul"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.8.15"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2021-37219"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": true,
"github_reviewed_at": "2021-09-08T18:12:59Z",
"nvd_published_at": "2021-09-07T12:15:00Z",
"severity": "HIGH"
},
"details": "HashiCorp Consul and Consul Enterprise 1.10.1 Raft RPC layer allows non-server agents with a valid certificate signed by the same CA to access server-only functionality, enabling privilege escalation. Fixed in 1.8.15, 1.9.9 and 1.10.2.",
"id": "GHSA-ccw8-7688-vqx4",
"modified": "2022-08-10T23:49:51Z",
"published": "2021-09-08T20:14:48Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-37219"
},
{
"type": "WEB",
"url": "https://github.com/hashicorp/consul/pull/10925"
},
{
"type": "WEB",
"url": "https://github.com/hashicorp/consul/commit/3357e57dac9aadabd476f7a14973e47f003c4cf0"
},
{
"type": "WEB",
"url": "https://github.com/hashicorp/consul/commit/473edd1764b6739e2e4610ea5dede4c2bc6009d1"
},
{
"type": "WEB",
"url": "https://github.com/hashicorp/consul/commit/ccf8eb1947357434eb6e66303ddab79f4c9d4103"
},
{
"type": "WEB",
"url": "https://discuss.hashicorp.com/t/hcsec-2021-22-consul-raft-rpc-privilege-escalation/29024"
},
{
"type": "PACKAGE",
"url": "https://github.com/hashicorp/consul"
},
{
"type": "WEB",
"url": "https://security.gentoo.org/glsa/202207-01"
},
{
"type": "WEB",
"url": "https://www.hashicorp.com/blog/category/consul"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
}
],
"summary": "HashiCorp Consul Privilege Escalation Vulnerability"
}
GHSA-CCXC-VR6P-4858
Vulnerability from github – Published: 2022-02-22 19:34 – Updated: 2022-03-08 18:26Impact
Cosign can be manipulated to claim that an entry for a signature exists in the Rekor transparency log even if it doesn't. This requires the attacker to have pull and push permissions for the signature in OCI. This can happen with both standard signing with a keypair and "keyless signing" with Fulcio.
Signing with a keypair
To reproduce this vulnerability, create a keypair and sign an image. Don't store the signature in Rekor:$ cosign generate-key-pair
$ cosign sign --key cosign.key IMAGE
If an attacker has access to the signature in OCI, they can manipulate cosign into believing the entry was stored in Rekor even though it wasn't. To accomplish this, the attacker needs to:
1. Pull the signature image
2. Annotate the signature image with any valid Rekor bundle under the `dev.sigstore.cosign/bundle` annotation
3. Push the signature image back to OCI
Verification then prints out the following:
$ cosign verify [--key] [IMAGE]
Verification for [IMAGE] --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- The signatures were verified against the specified public key
- Any certificates were verified against the Fulcio roots.
[…]
The claim that `Existence of the claims in the transparency log was verified offline` is inaccurate since an entry for this image doesn't exist in the log.
The claim that `Any certificates were verified against the Fulcio roots.` is technically correct but since there were no certificates that should be explicitly called out.
"Keyless signing" with an OIDC flow
To reproduce this vulnerability, sign the image with a Fulcio identity. Don't store the signature in Rekor:$ COSIGN_EXPERIMENTAL=1 cosign sign IMAGE
[...]
IMAGE appears to be a private repository, please confirm uploading to the transparency log at "https://rekor.sigstore.dev" [Y/N]: n
Then, create a keypair and sign the image again. Store an entry for the signature in Rekor:
$ cosign generate-key-pair
$ COSIGN_EXPERIMENTAL=1 cosign sign --key cosign.key IMAGE
Enter password for private key: IMAGE appears to be a private repository, please confirm uploading to the transparency log at "https://rekor.sigstore.dev" [Y/N]: y
If an attacker has access to the signature in OCI, they can manipulate cosign into believing the entry was stored in Rekor even though it wasn't. To accomplish this, the attacker needs to:
1. Pull the signature image
2. Copy the rekor bundle from the second signature into the first signature under the `dev.sigstore.cosign/bundle` annotation
3. Push the signature image back to OCI
_Note: For this to work, both signatures must occur during the valid lifespan of the certificate (~20 minutes)._
Verification then prints out the following:
$ cosign verify [--key] [IMAGE]
Verification for [IMAGE] --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- The signatures were verified against the specified public key
- Any certificates were verified against the Fulcio roots.
[…]
The claim that `Existence of the claims in the transparency log was verified offline` is inaccurate since an entry for this image doesn't exist in the log.
The claim that `Any certificates were verified against the Fulcio roots.` is technically correct but since there were no certificates that should be explicitly called out.
Patches
The vulnerability has been patched in v1.5.2 of cosign.
The signature in the signedEntryTimestamp provided by Rekor is now compared to the signature that is being verified. If these don't match, then an error is returned. If a valid bundle is copied to a different signature, verification should fail.
Cosign output now only informs the user that certificates were verified if a certificate was in fact verified.
Workarounds
The only workaround is upgrading.
For more information
If you have any questions or comments about this advisory: * Open an issue in cosign * Send us a message on Slack. Invite link here.
Thank you
Thank you to @mtrmac for finding and reporting this vulnerability.
Thank you to everyone who worked on fixing this: * @nsmith5 * @znewman01 * @dlorenc * @mattmoor * @priyawadhwa
{
"affected": [
{
"package": {
"ecosystem": "Go",
"name": "github.com/sigstore/cosign"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.5.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2022-23649"
],
"database_specific": {
"cwe_ids": [
"CWE-295"
],
"github_reviewed": true,
"github_reviewed_at": "2022-02-22T19:34:09Z",
"nvd_published_at": "2022-02-18T22:15:00Z",
"severity": "LOW"
},
"details": "### Impact\n\nCosign can be manipulated to claim that an entry for a signature exists in the Rekor transparency log even if it doesn\u0027t. This requires the attacker to have pull and push permissions for the signature in OCI. This can happen with both standard signing with a keypair and \"keyless signing\" with Fulcio.\n\n#### Signing with a keypair\n\n\u003cdetails\u003e\n\nTo reproduce this vulnerability, create a keypair and sign an image. Don\u0027t store the signature in Rekor:\n\n```\n$ cosign generate-key-pair \n$ cosign sign --key cosign.key IMAGE\n```\n\nIf an attacker has access to the signature in OCI, they can manipulate cosign into believing the entry was stored in Rekor even though it wasn\u0027t. To accomplish this, the attacker needs to:\n\n1. Pull the signature image\n2. Annotate the signature image with any valid Rekor bundle under the `dev.sigstore.cosign/bundle` annotation\n3. Push the signature image back to OCI\n\nVerification then prints out the following:\n\n```\n$ cosign verify [--key] [IMAGE]\n\nVerification for [IMAGE] --\nThe following checks were performed on each of these signatures:\n - The cosign claims were validated\n - Existence of the claims in the transparency log was verified offline\n - The signatures were verified against the specified public key\n - Any certificates were verified against the Fulcio roots.\n\n[\u2026]\n```\n\nThe claim that `Existence of the claims in the transparency log was verified offline` is inaccurate since an entry for this image doesn\u0027t exist in the log.\nThe claim that `Any certificates were verified against the Fulcio roots.` is technically correct but since there were no certificates that should be explicitly called out.\n\n\u003c/details\u003e\n\n#### \"Keyless signing\" with an OIDC flow\n\n\u003cdetails\u003e\n\nTo reproduce this vulnerability, sign the image with a Fulcio identity. Don\u0027t store the signature in Rekor: \n```\n$ COSIGN_EXPERIMENTAL=1 cosign sign IMAGE\n[...]\nIMAGE appears to be a private repository, please confirm uploading to the transparency log at \"https://rekor.sigstore.dev\" [Y/N]: n\n\n```\n\nThen, create a keypair and sign the image again. Store an entry for the signature in Rekor:\n\n```\n$ cosign generate-key-pair \n$ COSIGN_EXPERIMENTAL=1 cosign sign --key cosign.key IMAGE\n\nEnter password for private key: IMAGE appears to be a private repository, please confirm uploading to the transparency log at \"https://rekor.sigstore.dev\" [Y/N]: y\n```\n\nIf an attacker has access to the signature in OCI, they can manipulate cosign into believing the entry was stored in Rekor even though it wasn\u0027t. To accomplish this, the attacker needs to:\n\n1. Pull the signature image\n2. Copy the rekor bundle from the second signature into the first signature under the `dev.sigstore.cosign/bundle` annotation\n3. Push the signature image back to OCI\n\n_Note: For this to work, both signatures must occur during the valid lifespan of the certificate (~20 minutes)._\n\nVerification then prints out the following:\n\n```\n$ cosign verify [--key] [IMAGE]\n\nVerification for [IMAGE] --\nThe following checks were performed on each of these signatures:\n - The cosign claims were validated\n - Existence of the claims in the transparency log was verified offline\n - The signatures were verified against the specified public key\n - Any certificates were verified against the Fulcio roots.\n\n[\u2026]\n```\n\nThe claim that `Existence of the claims in the transparency log was verified offline` is inaccurate since an entry for this image doesn\u0027t exist in the log.\n\nThe claim that `Any certificates were verified against the Fulcio roots.` is technically correct but since there were no certificates that should be explicitly called out.\n\n\u003c/details\u003e\n\n\n### Patches\nThe vulnerability has been patched in v1.5.2 of cosign.\n\nThe `signature` in the `signedEntryTimestamp` provided by Rekor is now compared to the `signature` that is being verified. If these don\u0027t match, then an error is returned. If a valid bundle is copied to a different signature, verification should fail. \n\nCosign output now only informs the user that certificates were verified if a certificate was in fact verified.\n\n\n### Workarounds\nThe only workaround is upgrading.\n\n### For more information\nIf you have any questions or comments about this advisory:\n* Open an issue in [cosign](https://github.com/sigstore/cosign)\n* Send us a message on [Slack](https://sigstore.slack.com/). Invite link [here](https://join.slack.com/t/sigstore/shared_invite/zt-mhs55zh0-XmY3bcfWn4XEyMqUUutbUQ).\n\n### Thank you\nThank you to @mtrmac for finding and reporting this vulnerability.\n\nThank you to everyone who worked on fixing this:\n* @nsmith5\n* @znewman01 \n* @dlorenc\n* @mattmoor \n* @priyawadhwa\n",
"id": "GHSA-ccxc-vr6p-4858",
"modified": "2022-03-08T18:26:05Z",
"published": "2022-02-22T19:34:09Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/sigstore/cosign/security/advisories/GHSA-ccxc-vr6p-4858"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2022-23649"
},
{
"type": "WEB",
"url": "https://github.com/sigstore/cosign/commit/96d410a6580e4e81d24d112a0855c70ca3fb5b49"
},
{
"type": "WEB",
"url": "https://github.com/sigstore/cosign"
},
{
"type": "WEB",
"url": "https://github.com/sigstore/cosign/releases/tag/v1.5.2"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "Improper Certificate Validation in Cosign"
}
GHSA-CCXC-X975-4HH9
Vulnerability from github – Published: 2026-05-04 22:07 – Updated: 2026-06-08 19:48Summary
The set_config_value() API method (@permission(Perms.SETTINGS)) in src/pyload/core/api/__init__.py gates security-sensitive options behind a hand-maintained allowlist ADMIN_ONLY_CORE_OPTIONS. The option ("general", "ssl_verify") is not on that allowlist. Any authenticated user with the non-admin SETTINGS permission can set general.ssl_verify = off, and every subsequent outbound pycurl request is made with SSL_VERIFYPEER=0 and SSL_VERIFYHOST=0 — TLS peer and hostname verification are fully disabled. An on-path attacker can then present forged certificates for any hostname pyload fetches.
This is a direct continuation of the fix family CVE-2026-33509 / CVE-2026-35463 / CVE-2026-35464 / CVE-2026-35586, each of which patched a different missed option in the same allowlist.
Details
Writer — src/pyload/core/api/__init__.py, set_config_value() (around lines 215–290). The function is decorated with @permission(Perms.SETTINGS) and only rejects writes when (category, option) appears in ADMIN_ONLY_CORE_OPTIONS:
ADMIN_ONLY_CORE_OPTIONS = {
("general", "storage_folder"),
("log", "syslog_host"), ("log", "syslog_port"),
("proxy", "password"), ("proxy", "username"),
("reconnect", "script"),
("webui", "host"),
("webui", "ssl_certfile"), ("webui", "ssl_keyfile"), ("webui", "ssl_certchain"),
("webui", "use_ssl"),
}
...
if (category, option) in ADMIN_ONLY_CORE_OPTIONS and not is_admin:
self.pyload.log.error(...); return
self.pyload.config.set(category, option, value)
("general", "ssl_verify") is absent. config.set() in src/pyload/core/config/parser.py:329 calls cast() which has no branch for enum-string types — "off" is stored verbatim and persisted to disk via self.save().
Reader — src/pyload/core/network/request_factory.py:109-110:
def get_options(self):
return {
"interface": self.iface(),
"proxies": self.get_proxies(),
"ipv6": self.pyload.config.get("download", "ipv6"),
"ssl_verify": self.pyload.config.get("general", "ssl_verify"),
...
}
Sink — src/pyload/core/network/http/http_request.py:193-206:
if "ssl_verify" in options:
aiachaser_on = b"on (using aia-chaser)"
if options["ssl_verify"] in [True, b"on", aiachaser_on]:
...
ssl_verify = 1
else:
ssl_verify = 0
self.c.setopt(pycurl.SSL_VERIFYPEER, ssl_verify)
self.c.setopt(pycurl.SSL_VERIFYHOST, ssl_verify * 2)
Because get_options() is invoked every time a new pycurl handle is built, the new config value takes effect on the very next outbound request — no pyload restart required.
PoC
Authenticated as any user who has Perms.SETTINGS but is not admin (e.g. a user with Role.USER + the SETTINGS permission bit):
# 1) Log in as the SETTINGS (non-admin) user.
curl -c cookies.txt -X POST http://pyload.example:8000/api/login \
-d 'username=settings_user&password=<password>'
# 2) Disable TLS verification for all outbound downloads.
curl -b cookies.txt -X POST http://pyload.example:8000/api/setConfigValue \
-d 'category=general&option=ssl_verify&value=off§ion=core'
# -> 200 OK. Config persisted.
# 3) Enqueue any HTTPS download. An on-path attacker (shared LAN,
# compromised upstream router, DNS hijack, or a malicious proxy
# enabled via the sibling advisory on the proxy.* options) can
# now present a forged cert for any target — pyload accepts it.
Verification: observe pycurl SSL_VERIFYPEER=0 in a debug build, or confirm that a download from an HTTPS endpoint served with a self-signed / mismatched cert succeeds after step 2 and fails before it.
Impact
- Who: any authenticated user whose role was granted
Perms.SETTINGS. In multi-user pyload deployments that delegate settings administration to non-admins, this is an unintended privilege escalation from "can change UI/download settings" to "can silently disable TLS cert validation for all outbound fetches". - What:
- Man-in-the-middle on all HTTPS downloads, captcha fetches, update checks, and plugin HTTP calls.
- Extends the impact of the already-published SSRF chain (CVE-2026-33992 / CVE-2026-35459). The URL-hostname validation those patches added is only meaningful if the TLS channel authenticates the endpoint; with
ssl_verify=off, an on-path attacker can present forged certs for already-validated hosts — so HTTPS cloud-metadata endpoints and internal HTTPS services behind the host allowlist become reachable again. - Silent to the admin. Every adjacent security-critical option (
proxy.password, SSL certfile/keyfile/certchain,use_ssl) is already admin-only, so the admin's mental model is that TLS policy cannot be weakened by a non-admin.
- Not impacted: unauthenticated attackers; users holding only
DOWNLOAD/LISTroles.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 0.5.0b3.dev99"
},
"package": {
"ecosystem": "PyPI",
"name": "pyload-ng"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "0.5.0b3.dev100"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-42312"
],
"database_specific": {
"cwe_ids": [
"CWE-295",
"CWE-306",
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2026-05-04T22:07:24Z",
"nvd_published_at": "2026-05-11T18:16:34Z",
"severity": "MODERATE"
},
"details": "### Summary\n\nThe `set_config_value()` API method (`@permission(Perms.SETTINGS)`) in `src/pyload/core/api/__init__.py` gates security-sensitive options behind a hand-maintained allowlist `ADMIN_ONLY_CORE_OPTIONS`. The option `(\"general\", \"ssl_verify\")` is **not** on that allowlist. Any authenticated user with the non-admin `SETTINGS` permission can set `general.ssl_verify = off`, and every subsequent outbound pycurl request is made with `SSL_VERIFYPEER=0` and `SSL_VERIFYHOST=0` \u2014 TLS peer and hostname verification are fully disabled. An on-path attacker can then present forged certificates for any hostname pyload fetches.\n\nThis is a direct continuation of the fix family CVE-2026-33509 / CVE-2026-35463 / CVE-2026-35464 / CVE-2026-35586, each of which patched a different missed option in the same allowlist.\n\n### Details\n\n**Writer** \u2014 `src/pyload/core/api/__init__.py`, `set_config_value()` (around lines 215\u2013290). The function is decorated with `@permission(Perms.SETTINGS)` and only rejects writes when `(category, option)` appears in `ADMIN_ONLY_CORE_OPTIONS`:\n\n```python\nADMIN_ONLY_CORE_OPTIONS = {\n (\"general\", \"storage_folder\"),\n (\"log\", \"syslog_host\"), (\"log\", \"syslog_port\"),\n (\"proxy\", \"password\"), (\"proxy\", \"username\"),\n (\"reconnect\", \"script\"),\n (\"webui\", \"host\"),\n (\"webui\", \"ssl_certfile\"), (\"webui\", \"ssl_keyfile\"), (\"webui\", \"ssl_certchain\"),\n (\"webui\", \"use_ssl\"),\n}\n...\nif (category, option) in ADMIN_ONLY_CORE_OPTIONS and not is_admin:\n self.pyload.log.error(...); return\nself.pyload.config.set(category, option, value)\n```\n\n`(\"general\", \"ssl_verify\")` is absent. `config.set()` in `src/pyload/core/config/parser.py:329` calls `cast()` which has no branch for enum-string types \u2014 `\"off\"` is stored verbatim and persisted to disk via `self.save()`.\n\n**Reader** \u2014 `src/pyload/core/network/request_factory.py:109-110`:\n\n```python\ndef get_options(self):\n return {\n \"interface\": self.iface(),\n \"proxies\": self.get_proxies(),\n \"ipv6\": self.pyload.config.get(\"download\", \"ipv6\"),\n \"ssl_verify\": self.pyload.config.get(\"general\", \"ssl_verify\"),\n ...\n }\n```\n\n**Sink** \u2014 `src/pyload/core/network/http/http_request.py:193-206`:\n\n```python\nif \"ssl_verify\" in options:\n aiachaser_on = b\"on (using aia-chaser)\"\n if options[\"ssl_verify\"] in [True, b\"on\", aiachaser_on]:\n ...\n ssl_verify = 1\n else:\n ssl_verify = 0\n self.c.setopt(pycurl.SSL_VERIFYPEER, ssl_verify)\n self.c.setopt(pycurl.SSL_VERIFYHOST, ssl_verify * 2)\n```\n\nBecause `get_options()` is invoked every time a new pycurl handle is built, the new config value takes effect on the very next outbound request \u2014 no pyload restart required.\n\n### PoC\n\nAuthenticated as any user who has `Perms.SETTINGS` but is **not** admin (e.g. a user with `Role.USER` + the SETTINGS permission bit):\n\n```bash\n# 1) Log in as the SETTINGS (non-admin) user.\ncurl -c cookies.txt -X POST http://pyload.example:8000/api/login \\\n -d \u0027username=settings_user\u0026password=\u003cpassword\u003e\u0027\n\n# 2) Disable TLS verification for all outbound downloads.\ncurl -b cookies.txt -X POST http://pyload.example:8000/api/setConfigValue \\\n -d \u0027category=general\u0026option=ssl_verify\u0026value=off\u0026section=core\u0027\n# -\u003e 200 OK. Config persisted.\n\n# 3) Enqueue any HTTPS download. An on-path attacker (shared LAN,\n# compromised upstream router, DNS hijack, or a malicious proxy\n# enabled via the sibling advisory on the proxy.* options) can\n# now present a forged cert for any target \u2014 pyload accepts it.\n```\n\nVerification: observe pycurl `SSL_VERIFYPEER=0` in a debug build, or confirm that a download from an HTTPS endpoint served with a self-signed / mismatched cert succeeds after step 2 and fails before it.\n\n### Impact\n\n- **Who**: any authenticated user whose role was granted `Perms.SETTINGS`. In multi-user pyload deployments that delegate settings administration to non-admins, this is an unintended privilege escalation from \"can change UI/download settings\" to \"can silently disable TLS cert validation for all outbound fetches\".\n- **What**:\n 1. Man-in-the-middle on all HTTPS downloads, captcha fetches, update checks, and plugin HTTP calls.\n 2. Extends the impact of the already-published SSRF chain (CVE-2026-33992 / CVE-2026-35459). The URL-hostname validation those patches added is only meaningful if the TLS channel authenticates the endpoint; with `ssl_verify=off`, an on-path attacker can present forged certs for already-validated hosts \u2014 so HTTPS cloud-metadata endpoints and internal HTTPS services behind the host allowlist become reachable again.\n 3. Silent to the admin. Every adjacent security-critical option (`proxy.password`, SSL certfile/keyfile/certchain, `use_ssl`) is already admin-only, so the admin\u0027s mental model is that TLS policy cannot be weakened by a non-admin.\n- **Not impacted**: unauthenticated attackers; users holding only `DOWNLOAD` / `LIST` roles.",
"id": "GHSA-ccxc-x975-4hh9",
"modified": "2026-06-08T19:48:07Z",
"published": "2026-05-04T22:07:24Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/pyload/pyload/security/advisories/GHSA-ccxc-x975-4hh9"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-42312"
},
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-4744-96p5-mp2j"
},
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-ppvx-rwh9-7rj7"
},
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-r7mc-x6x7-cqxx"
},
{
"type": "ADVISORY",
"url": "https://github.com/advisories/GHSA-w48f-wwwf-f5fr"
},
{
"type": "PACKAGE",
"url": "https://github.com/pyload/pyload"
},
{
"type": "WEB",
"url": "https://github.com/pypa/advisory-database/tree/main/vulns/pyload-ng/PYSEC-2026-126.yaml"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N",
"type": "CVSS_V3"
}
],
"summary": "pyload-ng: non-admin SETTINGS users can disable outbound TLS peer verification via unrestricted `ssl_verify` config (incomplete fix for CVE-2026-33509 / -35463 / -35464 / -35586)"
}
Mitigation
Certificates should be carefully managed and checked to assure that data are encrypted with the intended owner's public key.
Mitigation
If certificate pinning is being used, ensure that all relevant properties of the certificate are fully validated before the certificate is pinned, including the hostname.
CAPEC-459: Creating a Rogue Certification Authority Certificate
An adversary exploits a weakness resulting from using a hashing algorithm with weak collision resistance to generate certificate signing requests (CSR) that contain collision blocks in their "to be signed" parts. The adversary submits one CSR to be signed by a trusted certificate authority then uses the signed blob to make a second certificate appear signed by said certificate authority. Due to the hash collision, both certificates, though different, hash to the same value and so the signed blob works just as well in the second certificate. The net effect is that the adversary's second X.509 certificate, which the Certification Authority has never seen, is now signed and validated by that Certification Authority.
CAPEC-475: Signature Spoofing by Improper Validation
An adversary exploits a cryptographic weakness in the signature verification algorithm implementation to generate a valid signature without knowing the key.