Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update and Fixed BlenderTools dev server option server.fs.deny can be bypassed when hosted on case-insensitive filesystem #720

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

lamrecognitions
Copy link

Update 👾 Describe The Sumarry:

Affected of this project EpicGames/BlenderTools are vulnerable to Access Control Bypass via the server.fs.deny option. An attacker can gain access to sensitive files by requesting raw filesystem paths using case-augmented versions of filenames. This is only exploitable if the server is hosted on a case-insensitive filesystem, including those used by Windows. This bypass is similar to CVE-2023-34092 with surface area reduced to hosts having case-insensitive filesystems.

Details
Since picomatch defaults to case-sensitive glob matching, but the file server doesn't discriminate; a blacklist bypass is possible. See picomatch usage, where nocase is defaulted to false:

 _setInternalServer(_server: ViteDevServer) {
      // Rebind internal the server variable so functions reference the user
      // server instance after a restart
      server = _server
    },
    _restartPromise: null,
    _importGlobMap: new Map(),
    _forceOptimizeOnRestart: false,
    _pendingRequests: new Map(),
    _fsDenyGlob: picomatch(config.server.fs.deny, { matchBase: true }),

PoCs By IAP ZeroDay:
npm run dev -- --host 0.0.0.0
Created dummy secret files, e.g. custom.secret and production.pem

export default { server: { fs: { deny: ['.env', '.env.*', '*.{crt,pem}', 'custom.secret'] } } }

🥷 According CVeScores:

Users with exposed dev servers on environments with case-insensitive filesystems Files protected by server.fs.deny are both discoverable, and accessible

CVE-2024-23331
CWE-178
CWE-200
CWE-284
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

…be bypassed when hosted on case-insensitive filesystem

## Update 👾 Describe The Sumarry:
Affected of this project `EpicGames/BlenderTools` are vulnerable to Access Control Bypass via the server.fs.deny option. An attacker can gain access to sensitive files by requesting raw filesystem paths using case-augmented versions of filenames. This is only exploitable if the server is hosted on a case-insensitive filesystem, including those used by Windows. This bypass is similar to CVE-2023-34092 with surface area reduced to hosts having case-insensitive filesystems.

**Details**
Since `picomatch` defaults to case-sensitive glob matching, but the file server doesn't discriminate; a blacklist bypass is possible. See `picomatch` usage, where `nocase` is defaulted to `false`:
```js
 _setInternalServer(_server: ViteDevServer) {
      // Rebind internal the server variable so functions reference the user
      // server instance after a restart
      server = _server
    },
    _restartPromise: null,
    _importGlobMap: new Map(),
    _forceOptimizeOnRestart: false,
    _pendingRequests: new Map(),
    _fsDenyGlob: picomatch(config.server.fs.deny, { matchBase: true }),
```

**PoCs By IAP ZeroDay:**
`npm run dev -- --host 0.0.0.0`
Created dummy secret files, e.g. `custom.secret` and `production.pem`

```rb
export default { server: { fs: { deny: ['.env', '.env.*', '*.{crt,pem}', 'custom.secret'] } } }
```

## 🥷 According CVeScores:
Users with exposed dev servers on environments with case-insensitive filesystems Files protected by `server.fs.deny` are both discoverable, and accessible

CVE-2024-23331
CWE-178
CWE-200
CWE-284
`CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant