LangChain CVE-2025-68664: Πώς Διαρρέουν Προσωπικά Δεδομένα μέσω του RAG Pipeline
Ενημερωμένο για το 2026.
Μια κρίσιμη ευπάθεια εντοπίστηκε στο LangChain στα τέλη του 2025. Το CVE είναι CVE-2025-68664. Η βαθμολογία CVSS είναι 9.3 (Κρίσιμη).
Αφορά τον κώδικα σειριοποίησης του LangChain.
Τι Κάνει το CVE-2025-68664
Το LangChain διαθέτει δύο συναρτήσεις σειριοποίησης: dumps() και dumpd(). Μετατρέπουν αντικείμενα Python σε κείμενο.
Η ευπάθεια εντοπίζεται στον χειρισμό κλεισιμάτων (closure handling).
Όταν το LangChain σειριοποιεί ένα callable, καταγράφει το περιβάλλον κλεισίματος.
Ένας εισβολέας που ελέγχει την απόκριση του LLM μπορεί να ενεργοποιήσει τη dumps(). Η συνάρτηση διαβάζει τότε μεταβλητές περιβάλλοντος από τη διεργασία Python.
Το αποτέλεσμα είναι έκθεση δεδομένων. Κλειδιά API, strings σύνδεσης βάσεων δεδομένων, μυστικά JWT και credentials AWS μπορούν να εμφανιστούν στην έξοδο του μοντέλου.
Ένας εισβολέας που εισάγει κείμενο σε ένα έγγραφο πηγής RAG μπορεί να διαβάσει τα production secrets σας.
Επηρεαζόμενες εκδόσεις: LangChain κάτω από 0.3.22 (Python). Η έκδοση 0.3.22 περιέχει τη διόρθωση.
Τα δεδομένα PyPI δείχνουν ευρεία χρήση παλαιότερων εκδόσεων έως τον Μάρτιο του 2026.
Πώς Διαρρέουν Προσωπικά Δεδομένα στα RAG Pipelines
Το CVE-2025-68664 είναι εντυπωσιακό. Αλλά είναι απλώς μια περίπτωση ενός ευρύτερου προβλήματος.
Τα δεδομένα διαρρέουν μέσω RAG pipelines συστηματικά. Δεν χρειάζεται καμία επίθεση.
Να μια τυπική εταιρική ρύθμιση RAG.
Πρώτα, η κατάχωρηση. Ευρετηριάζετε εταιρικά έγγραφα σε ένα vector store. Σκεφτείτε tickets υποστήριξης, emails πελατών, συμβόλαια και αρχεία HR.
Δημοφιλή vector stores είναι τα Pinecone, Weaviate και pgvector.
Στη συνέχεια, η ανάκτηση. Ένας χρήστης υποβάλλει ερώτηση. Το σύστημα ανακτά τα πέντε πιο σχετικά τμήματα από το store.
Έπειτα, η δημιουργία. Αυτά τα τμήματα μεταβιβάζονται σε ένα LLM — GPT-4o, Claude ή Gemini — ως πλαίσιο.
Το δεύτερο βήμα είναι το πρόβλημα. Τα ανακτηθέντα τμήματα περιέχουν ό,τι και τα έγγραφα πηγής. Αυτό περιλαμβάνει:
- Ονόματα πελατών, διευθύνσεις email και αριθμούς τηλεφώνου
- Αξίες συμβολαίων, αριθμούς λογαριασμών και φορολογικούς αριθμούς
- Δεδομένα μισθών υπαλλήλων και σημειώσεις αξιολόγησης απόδοσης
- Ονόματα ασθενών σε κλινικές σημειώσεις
- Εθνικούς αριθμούς ταυτότητας σε αρχεία μετανάστευσης
Αυτά τα δεδομένα μεταβιβάζονται στο LLM αυτούσια. Μπορούν να εμφανιστούν στην έξοδο του μοντέλου.
Καταγράφονται από τον πάροχο LLM. Παραμένουν στο ιστορικό συνομιλίας. Ρέουν στο observability stack σας.
Δεν χρειάζεται καμία επίθεση. Έτσι λειτουργεί το RAG εκ σχεδιασμού. Αυτός ο σχεδιασμός δημιουργεί πραγματικό κίνδυνο για την ιδιωτικότητα.
68 Μοτίβα Μυστικών σε Εταιρικές Αποθήκες Εγγράφων
Τα εργαλεία ασφαλείας παρακολουθούν 68 γνωστά μοτίβα μυστικών. Εμφανίζονται πιο συχνά από ό,τι περιμένουν οι ομάδες.
Να τα πιο κοινά.
- AWS Access Key IDs (
AKIA...) - Κλειδιά API OpenAI (
sk-...) - Κλειδιά API Anthropic (
sk-ant-...) - URIs βάσεων δεδομένων (
postgresql://user:password@host/db) - Tokens JWT (κεφαλίδες κωδικοποιημένες σε base64)
- Προσωπικά Tokens Πρόσβασης GitHub
- Μυστικά κλειδιά Stripe (
sk_live_...) - Κλειδιά API SendGrid
- SIDs λογαριασμών Twilio και tokens auth
- Blocks ιδιωτικών κλειδιών PEM
Ένα ticket υποστήριξης μπορεί να περιέχει ένα κλειδί API πελάτη από μια συνεδρία αποσφαλμάτωσης.
Ένα συμβόλαιο μπορεί να περιλαμβάνει credentials βάσης δεδομένων από μια τεχνική παράδοση.
Ένα αρχείο config που ευρετηριάστηκε κατά λάθος μπορεί να εκθέσει ολόκληρο ένα secrets store.
Όταν αυτά τα αρχεία εισέρχονται σε ένα vector store χωρίς εξυγίανση, κάθε ερώτηση μπορεί να μεταβιβάσει τα μυστικά στο LLM.
Μπορεί να φτάσουν και στον τελικό χρήστη.
Διόρθωση: Ανωνυμοποίηση Πριν την Ενσωμάτωση
Η σωστή προσέγγιση ανωνυμοποιεί τα έγγραφα πριν τον διαχωρισμό σε τμήματα και την ενσωμάτωση.
Αυτό το βήμα είναι υποχρεωτικό για κάθε σύστημα που χειρίζεται δεδομένα πελατών.
Να ένα παράδειγμα Python με χρήση του anonym.legal API:
import requests
import os
ANONYM_API_KEY = os.environ["ANONYM_API_KEY"]
ANONYM_BASE_URL = "https://anonym.legal/api"
def anonymize_before_embedding(text: str) -> tuple[str, dict]:
"""Ανωνυμοποίηση PII πριν την ενσωμάτωση."""
response = requests.post(
f"{ANONYM_BASE_URL}/presidio/anonymize",
json={
"text": text,
"language": "en",
"anonymizers": {
"DEFAULT": {"type": "replace", "new_value": "[REDACTED]"},
"PERSON": {"type": "mask", "masking_char": "*", "chars_to_mask": 4, "from_end": False},
"EMAIL_ADDRESS": {"type": "replace", "new_value": "[EMAIL]"},
"PHONE_NUMBER": {"type": "replace", "new_value": "[PHONE]"},
"CRYPTO": {"type": "replace", "new_value": "[SECRET]"},
"URL": {"type": "keep"},
}
},
headers={"Authorization": f"Bearer {ANONYM_API_KEY}"}
)
result = response.json()
return result["text"], result.get("items", [])
def build_rag_index(documents: list[str], vectorstore):
"""Δημιουργία ευρετηρίου RAG μόνο με καθαρά έγγραφα."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"Αφαιρέθηκαν {len(entities)} οντότητες PII από το έγγραφο")
vectorstore.add_texts(anonymized_docs)
Το anonym.legal API καλύπτει 285+ τύπους οντοτήτων. Ονόματα, emails, αριθμοί τηλεφώνου, εθνικά αναγνωριστικά, κλειδιά API και URIs βάσεων δεδομένων ανιχνεύονται όλα.
Τίποτα ευαίσθητο δεν φτάνει στο vector store. Οπότε τίποτα ευαίσθητο δεν μπορεί να διαρρεύσει στους χρήστες.
Δείτε τον οδηγό προγραμματιστή για μοτίβα ρύθμισης LangChain και LlamaIndex.
Διόρθωση του CVE-2025-68664 Τώρα
Αν χρησιμοποιείτε LangChain κάτω από 0.3.22, ενημερώστε αμέσως:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Μετά την επιδιόρθωση, ελέγξτε τις ρυθμίσεις της αλυσίδας σας για κίνδυνο έγχυσης. Να τρία βήματα που πρέπει να ακολουθήσετε.
Πρώτον, επικυρώστε τα ανακτηθέντα τμήματα. Κάντε το αυτό πριν φτάσουν στο LLM.
Αφαιρέστε περιεχόμενο που ταιριάζει με μοτίβα έγχυσης όπως ignore previous instructions, system: ή <INST>.
Δεύτερον, ανωνυμοποιήστε πριν την ενσωμάτωση. Αυτό συρρικνώνει την επιφάνεια επίθεσης.
Αν συμβεί έγχυση, τα ευαίσθητα δεδομένα δεν βρίσκονται εκεί για εξαγωγή.
Τρίτον, περιορίστε τα δικαιώματα της αλυσίδας. Οι αλυσίδες LangChain δεν πρέπει να διαβάζουν μεταβλητές περιβάλλοντος πέρα από αυτές που χρειάζονται.
Χρησιμοποιήστε λογαριασμό υπηρεσίας με ελάχιστες δικαιοδοσίες.
Τα Μαθηματικά Είναι Απλά
Η βαθμολογία CVSS είναι 9.3. Η διόρθωση είναι μία κλήση API ανά έγγραφο.
Ο συνδυασμός του CVE-2025-68664 και του γενικού κινδύνου δεδομένων RAG αποτελεί πραγματική ευθύνη.
Η λύση είναι ξεκάθαρη: ανωνυμοποίηση κατά την κατάχωρηση, όχι κατά τον χρόνο ερώτησης.
Ελέγξτε την επισκόπηση ασφάλειας και συμμόρφωσης για απαιτήσεις εταιρικού RAG.
Πηγές
- NVD CVE-2025-68664, CVSS 9.3, ευπάθεια σειριοποίησης LangChain
- Συμβουλευτικό ασφαλείας LangChain, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Prompt Injection, LLM06 Sensitive Information Disclosure
- Τεκμηρίωση τύπων οντοτήτων anonym.legal — 285+ υποστηριζόμενοι τύποι οντοτήτων