Skip to content

File tree

7 files changed

+343
-58
lines changed

7 files changed

+343
-58
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-3m6g-2423-7cp3",
4+
"modified": "2026-03-19T12:45:53Z",
5+
"published": "2026-03-19T12:45:53Z",
6+
"aliases": [
7+
"CVE-2026-33210"
8+
],
9+
"summary": "Ruby JSON has a format string injection vulnerability",
10+
"details": "### Impact\n\nA format string injection vulnerability than that lead to denial of service attacks or information disclosure, when the `allow_duplicate_key: false` parsing option is used to parse user supplied documents. \n\nThis option isn't the default, if you didn't opt-in to use it, you are not impacted.\n\n### Patches\n\nPatched in `2.19.2`.\n\n### Workarounds\n\nThe issue can be avoided by not using the `allow_duplicate_key: false` parsing option.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V4",
14+
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "RubyGems",
21+
"name": "json"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "2.18.0"
29+
},
30+
{
31+
"fixed": "2.19.2"
32+
}
33+
]
34+
}
35+
]
36+
},
37+
{
38+
"package": {
39+
"ecosystem": "RubyGems",
40+
"name": "json"
41+
},
42+
"ranges": [
43+
{
44+
"type": "ECOSYSTEM",
45+
"events": [
46+
{
47+
"introduced": "2.16.0"
48+
},
49+
{
50+
"fixed": "2.17.1.2"
51+
}
52+
]
53+
}
54+
]
55+
},
56+
{
57+
"package": {
58+
"ecosystem": "RubyGems",
59+
"name": "json"
60+
},
61+
"ranges": [
62+
{
63+
"type": "ECOSYSTEM",
64+
"events": [
65+
{
66+
"introduced": "2.14.0"
67+
},
68+
{
69+
"fixed": "2.15.2.1"
70+
}
71+
]
72+
}
73+
]
74+
}
75+
],
76+
"references": [
77+
{
78+
"type": "WEB",
79+
"url": "https://github.com/ruby/json/security/advisories/GHSA-3m6g-2423-7cp3"
80+
},
81+
{
82+
"type": "PACKAGE",
83+
"url": "https://github.com/ruby/json"
84+
}
85+
],
86+
"database_specific": {
87+
"cwe_ids": [
88+
"CWE-134"
89+
],
90+
"severity": "HIGH",
91+
"github_reviewed": true,
92+
"github_reviewed_at": "2026-03-19T12:45:53Z",
93+
"nvd_published_at": null
94+
}
95+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-5x2w-37xf-7962",
4+
"modified": "2026-03-19T12:46:01Z",
5+
"published": "2026-03-19T12:46:01Z",
6+
"aliases": [],
7+
"summary": "AVideo has Unauthenticated PGP Message Decryption via Public Endpoint",
8+
"details": "### Summary\n\nThe AVideo platform exposes a publicly accessible endpoint that performs server-side PGP decryption without requiring any form of authentication. Any anonymous user can submit a private key, ciphertext, and passphrase to the endpoint and receive the decrypted plaintext in the JSON response. This functionality is entirely unprotected, meaning no session, token, or credential is needed to invoke it.\n\n### Details\n\nThe endpoint at decryptMessage.json.php accepts a JSON body containing three user-supplied fields: a private key, an encrypted message, and a key password. The server passes these directly into a decryption routine and returns the result. There is no call to any authentication or session validation function before this operation is performed. The relevant server-side operation is:\n\n```php\n$textDecrypted = decryptMessage($obj->textToDecrypt, $obj->privateKeyToDecryptMsg, $obj->keyPassword);\n```\n\nBecause no access control exists, any unauthenticated request that reaches this endpoint will be processed. The primary concerns are exposure of private key material to server memory and logging infrastructure, and unconstrained consumption of server CPU resources for cryptographic operations. An attacker who has obtained a private key and matching ciphertext through other means can offload decryption work to the target server without holding any account on the platform.\n\n### PoC\n\n```sh\ncurl -s -X POST \\\n \"https://target.example.com/plugin/LoginControl/pgp/decryptMessage.json.php\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"textToDecrypt\": \"-----BEGIN PGP MESSAGE-----\\n<base64_ciphertext>\\n-----END PGP MESSAGE-----\",\n \"privateKeyToDecryptMsg\": \"-----BEGIN PGP PRIVATE KEY BLOCK-----\\n<base64_private_key>\\n-----END PGP PRIVATE KEY BLOCK-----\",\n \"keyPassword\": \"passphrase\"\n }'\n```\n\n### Impact\n\nPrivate key material submitted to this endpoint is processed in server memory and may be captured in application logs, web server access logs, or error logs depending on server configuration. This can result in unintended disclosure of sensitive key material to administrators or anyone with log access. Additionally, the lack of any rate limiting combined with the absence of authentication allows any external party to submit large volumes of decryption requests, consuming server CPU resources without restriction. Any user who can reach the endpoint network-layer can trigger these effects.\n\n### Mitigation\n\nA User::isLogged() check, or an equivalent session and authentication validation step, should be added at the top of decryptMessage.json.php before any user-supplied input is processed. Decryption operations should only be permitted for authenticated and authorized users. Server logging configuration should also be reviewed to ensure that POST body contents, including key material, are not written to persistent logs.",
9+
"severity": [
10+
{
11+
"type": "CVSS_V4",
12+
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N"
13+
}
14+
],
15+
"affected": [
16+
{
17+
"package": {
18+
"ecosystem": "Packagist",
19+
"name": "wwbn/avideo"
20+
},
21+
"ranges": [
22+
{
23+
"type": "ECOSYSTEM",
24+
"events": [
25+
{
26+
"introduced": "0"
27+
},
28+
{
29+
"last_affected": "25.0"
30+
}
31+
]
32+
}
33+
]
34+
}
35+
],
36+
"references": [
37+
{
38+
"type": "WEB",
39+
"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-5x2w-37xf-7962"
40+
},
41+
{
42+
"type": "PACKAGE",
43+
"url": "https://github.com/WWBN/AVideo"
44+
}
45+
],
46+
"database_specific": {
47+
"cwe_ids": [
48+
"CWE-306"
49+
],
50+
"severity": "MODERATE",
51+
"github_reviewed": true,
52+
"github_reviewed_at": "2026-03-19T12:46:01Z",
53+
"nvd_published_at": null
54+
}
55+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-phhv-63fh-rrc8",
4+
"modified": "2026-03-19T12:46:30Z",
5+
"published": "2026-03-18T18:31:16Z",
6+
"aliases": [
7+
"CVE-2026-33002"
8+
],
9+
"summary": "Jenkins has a DNS rebinding vulnerability in WebSocket CLI origin validation",
10+
"details": "Jenkins 2.442 through 2.554 (both inclusive), LTS 2.426.3 through LTS 2.541.2 (both inclusive) performs origin validation of requests made through the CLI WebSocket endpoint by computing the expected origin for comparison using the Host or X-Forwarded-Host HTTP request headers, making it vulnerable to DNS rebinding attacks that allow bypassing origin validation.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Maven",
21+
"name": "org.jenkins-ci.main:jenkins-core"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "2.442"
29+
},
30+
{
31+
"fixed": "2.555"
32+
}
33+
]
34+
}
35+
]
36+
}
37+
],
38+
"references": [
39+
{
40+
"type": "ADVISORY",
41+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-33002"
42+
},
43+
{
44+
"type": "WEB",
45+
"url": "https://github.com/jenkinsci/jenkins/commit/348666da7136ef8270f88c0a7350562b0ba7f8ce"
46+
},
47+
{
48+
"type": "PACKAGE",
49+
"url": "https://github.com/jenkinsci/jenkins"
50+
},
51+
{
52+
"type": "WEB",
53+
"url": "https://www.jenkins.io/security/advisory/2026-03-18/#SECURITY-3674"
54+
}
55+
],
56+
"database_specific": {
57+
"cwe_ids": [
58+
"CWE-346",
59+
"CWE-350"
60+
],
61+
"severity": "HIGH",
62+
"github_reviewed": true,
63+
"github_reviewed_at": "2026-03-19T12:46:29Z",
64+
"nvd_published_at": "2026-03-18T16:16:28Z"
65+
}
66+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-r6qv-frpc-q66c",
4+
"modified": "2026-03-19T12:46:21Z",
5+
"published": "2026-03-18T18:31:16Z",
6+
"aliases": [
7+
"CVE-2026-33001"
8+
],
9+
"summary": "Jenkins has a link following vulnerability allows arbitrary file creation",
10+
"details": "Jenkins 2.554 and earlier, LTS 2.541.2 and earlier does not safely handle symbolic links during the extraction of .tar and .tar.gz archives, allowing crafted archives to write files to arbitrary locations on the filesystem, restricted only by file system access permissions of the user running Jenkins.\nThis can be exploited to deploy malicious scripts or plugins on the controller by attackers with Item/Configure permission, or able to control agent processes.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V4",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Maven",
21+
"name": "org.jenkins-ci.main:jenkins-core"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "2.555"
32+
}
33+
]
34+
}
35+
],
36+
"database_specific": {
37+
"last_known_affected_version_range": "<= 2.554"
38+
}
39+
}
40+
],
41+
"references": [
42+
{
43+
"type": "ADVISORY",
44+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-33001"
45+
},
46+
{
47+
"type": "WEB",
48+
"url": "https://github.com/jenkinsci/jenkins/commit/6dc99937605d5bddfeaae43a4cd14c2571e23adc"
49+
},
50+
{
51+
"type": "PACKAGE",
52+
"url": "https://github.com/jenkinsci/jenkins"
53+
},
54+
{
55+
"type": "WEB",
56+
"url": "https://github.com/jenkinsci/jenkins/releases/tag/jenkins-2.555"
57+
},
58+
{
59+
"type": "WEB",
60+
"url": "https://www.jenkins.io/security/advisory/2026-03-18/#SECURITY-3657"
61+
}
62+
],
63+
"database_specific": {
64+
"cwe_ids": [
65+
"CWE-61"
66+
],
67+
"severity": "HIGH",
68+
"github_reviewed": true,
69+
"github_reviewed_at": "2026-03-19T12:46:21Z",
70+
"nvd_published_at": "2026-03-18T16:16:28Z"
71+
}
72+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-w5ff-2mjc-4phc",
4+
"modified": "2026-03-19T12:45:38Z",
5+
"published": "2026-03-19T12:45:38Z",
6+
"aliases": [],
7+
"summary": "AVideo has an OS Command Injection via Unescaped URL in LinkedIn Video Upload Shell Command",
8+
"details": "## Summary\n\nThe `uploadVideoToLinkedIn()` method in the SocialMediaPublisher plugin constructs a shell command by directly interpolating an upload URL received from LinkedIn's API response, without sanitization via `escapeshellarg()`. If an attacker can influence the LinkedIn API response (via MITM, compromised OAuth token, or API compromise), they can inject arbitrary OS commands that execute as the web server user.\n\n## Details\n\nThe vulnerability exists in `plugin/SocialMediaPublisher/Objects/SocialUploader.php`.\n\nThe `initializeLinkedInUploadSession()` method (line 649) sends a POST request to `https://api.linkedin.com/rest/videos?action=initializeUpload` and parses the JSON response at line 693:\n\n```php\n// SocialUploader.php:693\n$responseArray = json_decode($response, true);\n```\n\nThe parsed `uploadInstructions` array is iterated at line 532, and each `uploadUrl` is passed to `uploadVideoToLinkedIn()` at line 542:\n\n```php\n// SocialUploader.php:542\n$uploadResponse = self::uploadVideoToLinkedIn($instruction['uploadUrl'], $tmpFile);\n```\n\nThe `uploadVideoToLinkedIn()` method (line 711) constructs a shell command by directly concatenating both `$uploadUrl` and `$filePath` into a string passed to `exec()`:\n\n```php\n// SocialUploader.php:713-720\n$shellCmd = 'curl -v -H \"Content-Type:application/octet-stream\" --upload-file \"' .\n $filePath . '\" \"' .\n $uploadUrl . '\" 2>&1';\n\n_error_log(\"Upload Video Shell Command:\\n\" . $shellCmd);\n\nexec($shellCmd, $o);\n```\n\nNeither `$uploadUrl` nor `$filePath` is sanitized with `escapeshellarg()`. A malicious URL such as `https://uploads.linkedin.local\" ; id ; echo \"` would break out of the quoted string and execute arbitrary commands.\n\nThe `$uploadUrl` originates from LinkedIn's API response — a trusted third-party source over HTTPS — so exploitation requires compromising that response (MITM at CA level, compromised OAuth token leading to attacker-controlled API responses, or LinkedIn API compromise). This makes the attack complexity high, but the missing sanitization is a defense-in-depth failure that could become critical if the trust boundary is ever violated.\n\n## PoC\n\nThis vulnerability requires manipulating the LinkedIn API response. A simulated proof-of-concept using a local proxy:\n\n**Step 1:** Set up a proxy that intercepts the LinkedIn API response and replaces the `uploadUrl` field:\n\n```json\n{\n \"value\": {\n \"uploadInstructions\": [\n {\n \"uploadUrl\": \"https://example.com\\\" ; id > /tmp/pwned ; echo \\\"\",\n \"firstByte\": 0,\n \"lastByte\": 1024\n }\n ],\n \"uploadToken\": \"token123\",\n \"video\": \"urn:li:video:123\"\n }\n}\n```\n\n**Step 2:** The resulting shell command becomes:\n\n```bash\ncurl -v -H \"Content-Type:application/octet-stream\" --upload-file \"/tmp/tmpfile\" \"https://uploads.linkedin.local\" ; id > /tmp/pwned ; echo \"\" 2>&1\n```\n\n**Step 3:** The `id` command executes as the web server user, writing output to `/tmp/pwned`.\n\n**Step 4:** Verify:\n\n```bash\ncat /tmp/pwned\n# uid=33(www-data) gid=33(www-data) groups=33(www-data)\n```\n\n## Impact\n\n- **Remote Code Execution:** If the LinkedIn API response is compromised, an attacker gains arbitrary command execution as the web server user (`www-data`).\n- **Confidentiality:** Full read access to application source code, configuration files (including database credentials), and any data accessible to the web server process.\n- **Integrity:** Ability to modify application files, inject backdoors, or alter database records.\n- **Practical risk is low** due to the high attack complexity — exploitation requires compromising a trusted HTTPS API response from LinkedIn. This is primarily a defense-in-depth issue.\n\n## Recommended Fix\n\nSanitize both `$uploadUrl` and `$filePath` with `escapeshellarg()` before interpolation into the shell command. Alternatively, replace the `exec()` call with PHP's native cURL functions (which are already used elsewhere in the same class):\n\n**Option 1 — Minimal fix with `escapeshellarg()`:**\n\n```php\n// plugin/SocialMediaPublisher/Objects/SocialUploader.php:711-715\nstatic function uploadVideoToLinkedIn($uploadUrl, $filePath)\n{\n $shellCmd = 'curl -v -H \"Content-Type:application/octet-stream\" --upload-file ' .\n escapeshellarg($filePath) . ' ' .\n escapeshellarg($uploadUrl) . ' 2>&1';\n```\n\n**Option 2 — Replace shell exec with native PHP cURL (preferred):**\n\n```php\nstatic function uploadVideoToLinkedIn($uploadUrl, $filePath)\n{\n $ch = curl_init();\n curl_setopt($ch, CURLOPT_URL, $uploadUrl);\n curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/octet-stream']);\n curl_setopt($ch, CURLOPT_PUT, true);\n curl_setopt($ch, CURLOPT_INFILE, fopen($filePath, 'r'));\n curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_HEADER, true);\n curl_setopt($ch, CURLOPT_VERBOSE, true);\n\n $response = curl_exec($ch);\n $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);\n $headers = substr($response, 0, $headerSize);\n curl_close($ch);\n\n // Extract ETag from response headers\n $matches = [];\n preg_match('/(etag:)(\\s?)(.*)(\\n)/i', $headers, $matches);\n $etag = isset($matches[3]) ? trim($matches[3]) : null;\n\n // ... rest of function\n}\n```\n\nOption 2 is strongly preferred as it eliminates the shell execution entirely, removing the injection surface and aligning with the PHP cURL usage already present in `initializeLinkedInUploadSession()` on line 664.",
9+
"severity": [
10+
{
11+
"type": "CVSS_V3",
12+
"score": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N"
13+
}
14+
],
15+
"affected": [
16+
{
17+
"package": {
18+
"ecosystem": "Packagist",
19+
"name": "wwbn/avideo"
20+
},
21+
"ranges": [
22+
{
23+
"type": "ECOSYSTEM",
24+
"events": [
25+
{
26+
"introduced": "0"
27+
},
28+
{
29+
"last_affected": "25.0"
30+
}
31+
]
32+
}
33+
]
34+
}
35+
],
36+
"references": [
37+
{
38+
"type": "WEB",
39+
"url": "https://github.com/WWBN/AVideo/security/advisories/GHSA-w5ff-2mjc-4phc"
40+
},
41+
{
42+
"type": "PACKAGE",
43+
"url": "https://github.com/WWBN/AVideo"
44+
}
45+
],
46+
"database_specific": {
47+
"cwe_ids": [
48+
"CWE-78"
49+
],
50+
"severity": "MODERATE",
51+
"github_reviewed": true,
52+
"github_reviewed_at": "2026-03-19T12:45:38Z",
53+
"nvd_published_at": null
54+
}
55+
}

advisories/unreviewed/2026/03/GHSA-phhv-63fh-rrc8/GHSA-phhv-63fh-rrc8.json

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)