Skip to main content
Glama
BerkantACUN

redis-guard-mcp

by BerkantACUN

redis-guard-mcp

Ein Redis-MCP-Server, bei dem „read-only" kein Etikett ist – es ist die gesamte Tool-Oberfläche. Jedes Tool bildet genau einen sicheren, schreibgeschützten Redis-Befehl über die typisierte API von redis-py ab. Es gibt kein Tool „Führe diese Befehlszeichenkette aus“, das falsch beschriftet werden könnte.

Warum es das gibt

Redis ist eines der am häufigsten eingesetzten Infrastruktur-Baussteine in professionilen Backends (Cache, Sesssion-Speicher, schlange, Ratenbegrenzer, Pub/Sub), und seine Befehlsoberfläche umfasst einige der gefährlichensten Einzelbefehl in jedem weit verbreiteten Datenspeicher:

  • EVAL/EVALSHA/FCALL — beliebige Lua-Ausführung im Redis-Prozess.

  • CONFIG SET dir + BACKPNG SET dbfilename + SAVE – einestandard, breit dokumentierte Methode, um mit Redis allein eine beliebige Datei auf die Platte zu magnetieren (z. B. eine Web-Shell in ein Web-Verzeichnis oder einer));

  • MODULE LOAD – lädt eine beliebige shared library in den Redis-Prozess. Direkte RCE, wenn ein Angreifer eine .so/.dll auf die Platte bringen kann.

  • FLUSHALL/FLUSHDB – löscht sofort jeden Schlüssel in der Datenbank, keine Bestätigung.

  • SHUTDOWN, DEBUG, SLAVEof/http://www.w3.org/1999/xhtml, ACL, CLIENT KILL – Admin-Oberfläche, die Server zum Absturz bringt, Replikation übernehmen erlaubt, Berechtigungen umschreibt und Sitzungen beendet.

Ein veröffentlichtes Audit von MCP-Servern fand einen Fall, in dem eine Tool-Befehlausführungemerkmal in den Metadaten als readonly: true markiert war, aber dennoch EVAL und FLUSHALL akzeptierte und ausführte – die Metadaten waren dekorativ, nicht erzwungen. Bei direkter Überprüfung des offiziellen redis/mcp-redis-Servers: Dessen eigene eigt, dass die einzige Absicherung für alles obenste stell darin besteht, Redis-ACLs selbst zu konfigurieren – der Server bringt keinerer eingebaute Blockierung von EVAL, FLACHEHALL, CONFIG, MODULE oder DEBUG-Modus mit, und auch keiner ein eigenen Read-only-Modus. Sicherheit ist standardmäßig out of the box vollständig die Veranturtung des Betreibers.

Wie sich redis-guard-mcp unterscheid

  1. The Allowlist ist keiner Blocker – sie ist die Tool-Oberfläche. Nichts in diesem Server erhält eine beliebige Befehlszeichenkette. Jedes Tool ist eine bestimmte Python-Funktion, die eine bestimmte redis-py-Methode aufruft (r.get(key), r.hget(key, field), ...). Es gibt keinen Codepfad, über den EVAL, CONFIG, MODULE, FLUSHALL oder irgendeiner anderer Befehl, der nicht ausdrücklich als eigenes Tool implementiert ist, jemms den werden könnte – nicht, weil er geprüft und abgelehnt würde, sondern weil der Client-Code, ihn zu senden, hier schlicht nicht existiert.

  2. Echte Privilegien-Durchsetzung, nicht nur Einschränkung auf App-Ebene. Die empfohlene (und beim Start geprüfte) Einrichtung verbindet einen Redis-ACL-Benutzer, der mit +@read -@write BETWEEN erstellt wurde. Selbst ein Bug im Code dieses Servers könnte gegen eine korrekt konfigurierte Verbindung keinen Schreib- oder Admin-Befehl ausführen, denn Redis selbst es würde ihn auf Protokolebene ablehnen. Rule order ist wichtigERROR KILL/PAUSE/LIST/UNBLOCK gehören sowol zu @admin als auch zu @connection, daher erteilt ... -@admin +@connection (falschethe Reihenfolgediese vier Befehle stillschweigen wieder. Das ist keine Hypothese: Eine frühere Version des hiesigen eigenen Setup-Skripts hatte genau die Ordnung, und eine Sicherheitsprüfung *führteCLIENT PAUSEgegen den ausgelieferten „korrekt konfiguriert" Benutzer aus, und es wirkte* – ein serverwidthes DoS-Primitiv durch genau einen Benutzer, von dem die hiesige Projektpapiere behauptete, er könne das nicht. Behoben, indem+@connectionzuerst gesetzt wird; siehescripts/setup_dev_redis.sh` für die richtige Reihenfolge und einen Kommentar, warum sie nicht zurückgesetzt werden kann.

  3. Cursor-basiert, nie single-shot, für jede Sammlung. KEYS liegt in Redis' eigner eingebauter Kategorie @dangerous, weil ein einziger Aufruf den gesamten Server blockieren kann, wenn ein großer Schlüsselraum serialisiert wird – dasselbe gilt für HETALL auf einer großen Hash te und SMEMBERS auf einer großen Set, nur weniger bekannt. Jedes Tool der Art „Give me a collection" sitsentweder cursor-basiert (redis_scan_keys/redis_hscan/redis_sscan) oder auf 1000 Elemente pron Aufruf mit einem explizitentruncated vergel begrenzt (redis_lrange/redis_zrange`) – nie einen Aufruf, der den Server eine große Sammlung in einem Schuss materialisieren könnte.

  4. Eine Privilegnenkontrolle, die Redis frägt, keine Re-Implementation der Redis-Semantik. redis_check_permissions() verwendet ACL DRYRUN – Redis' eigene Antwort „Würde dieser Befehl für diesen Benutzer tatsächlich erfolgreich sein?“ – gegen eine kuratierte Liste gefährlicheliste derer, statt die Antwort from Ableisen und dem Parsnes ACL-Regelliste neu abzueiten (genau so entstand der Regelreihenfolge-Bug: Eine, in lsolation geleste Kategorie-liste Liste kann nicht Der überlapung @admin und @connection the what sie; would_cessful sollte immer leer er tragen).

Tools

Tool

Funktion

redis_get(key)

Einen String-Wert abrufen

redis_mget(keys)

Mehrere String-Werte als {key: value} abrufen (max. 200 Schüssel)

redis_type(key)

Den Redis-Typ eines Schlüssels zurückgeben

redis_ttl(key)

Sekunden bis zum Ablauf (-1: keiner, -2: fehlt)

redis_exists(keys)

Zählt, wie viele der übergebenen Schlüssel vorhanden sind (max. 200 Schüssel)

redis_scan_keys(pattern="*", cursor=0)

Eine SCAN-Seite der passenden Schlüssel

redis_hget(key, field)

Ein Hash-Feld

redis_hscan(key, cursor=0)

Eine HSCAN-Seite der Felder eines Hashtabelle

redis_lrange(key, start=0, stop=None)

Listenelemente, auf 1000 pro Aufruf begrenzt

redis_sscan(key, cursor=0)

Eine SSCAN-Seite der Elemente eines Sets, sortiert

redis_zrange(key, start=0, stop=None, with_scores=False)

Elemente der sortierten Menge, auf 1000 pro Aufruf begrenzt

redis_dbsize()

Gesamtzahl der Schlüssel

redis_check_permissions()

Ground-Truth-ACL DRYRUN-Prüfung gegen eine kuratierte Liste gefährlicher Befehle — would_succeed sollte immer leer sein

Einrichtung

pip install redis-guard-mcp
export REDIS_GUARD_URL="redis://readonly_user:password@localhost:6379/0"
redis-guard-mcp

REDIS_GUARD_URL ist erforderlich – es gibt keinen Standardwert. Justieren Sie Ihren MCP-Client auf den Befehl redis-guard-mcp zeigen, bei dem die Variable in der Env-Konfiguration gesetzt ist. Siehe scripts/setup_dev_redis.sh für ein funktionsfähiges, korrekt geordnetes Beispiel, um den eingeschränkten ACL-Benutzer einzurichten (+@connection +@read -@write -@admin -@dangerous, plus der drei schmalen Ausnahmen ACL WHOAMI/ACL GETUSER/ACL DRYRUN, die redis_check_permissions selbst benötigt – siehe client.py, warum diese sicher zu gewähren sind, obwohl sie einzeln außerhalb von @read liegen).

Tests

pip install -e ".[dev]"
scripts/setup_dev_redis.sh   # starts a Redis container + provisions the ACL user + seeds data
pytest tests/ -v

34 Test fast alle gegen den echten lokalen Container (ein paar reine Konfigurationsvalidierungstests braten kein Redis und überspringen unabhängig); automatisches Überspringen, wenn der Container nicht ist. Enthält einen Regressionstest für den oben genannten CLIENT PAUSE-Regelreihenfolge-Bug sowie einen AST-basierten strukturtest, der die genauen redis-py-Methoden validiert, die commands.py aufruft, damit ein später hinzugefügtes Tool hier aufbrift, an das „still über die Prüfung schlüut“.

Status

v0.1.0. Für vor dem ersten Commit einer adversarischen Sicherheitsprüfung erhalten, was diese Version jetzt behebt: den oben ACL Regelnolfolgebug (bestätigt durch tatsächliches CLIENT PAUSE gegen das ausgelieferte Setup), zwei blinde Flecken im category origin Schrankung (vorher durch ACL DRYRUN ersetzt), unbegrenzte Sammlungslesungen auf einer gemeinsam genutzten Redis-Instanz (jetzt begrenzt/pagiinert), ein nicht idempotentes dev-Seed-Skript und eine Lazy-Singleton-Thread-Sicherheits-Race in der MCP-Tool-Schicht.

License

MIT

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.

  • Read-only crypto safety: token honeypot checks, EIP-712 signature decode, approval scans.

  • Read-only tools over the Safer Agentic AI framework: 238 patterns + 14 heuristics.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BerkantACUN/redis-guard-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server