Minh họa kỹ thuật trừu tượng trên nền đá phiến thẫm: một cột máy chủ tài liệu hẹp ở bên trái truyền các thẻ hình chữ nhật nhỏ dọc theo một kênh được chiếu sáng về phía một nút tác nhân duy nhất ở bên phải, nút này giữ một vòng gồm các vật thể nhỏ hình chìa khóa. Một trong các thẻ được viền màu hổ phách và mang một bóng chìa khóa mờ nhạt được phản chiếu trong vòng của tác nhân. Phía sau cột là một lưới thưa các mục thư viện, một trong số đó được tô đậm hơn những mục còn lại. Các đường kẻ mảnh màu xanh mòng két chia kênh thành các đoạn giao hàng. Không có người, không có logo, không có bất kỳ chữ viết nào. Logo OrcaRouter được ghép ở góc dưới cùng bên phải.
AI Safety Incidents

CVE-2026-75130: Máy chủ tài liệu MCP của Context7 được chấm 9.0 điểm, và hồ sơ không nêu phiên bản đã được sửa

Tác giả

Alistair Wren

Ngày đăng

Mô hình mới nhất · 20Xem tất cả mô hình →
Benchmark: Artificial Analysis · cập nhật hằng ngày
Quay lại tất cả bài viết

Vào ngày 18 tháng 8 năm 2026, VulnCheck đã công bố CVE-2026-75130 đối với Context7, máy chủ tài liệu thư viện do Upstash vận hành cho Model Context Protocol và được các agent lập trình truy vấn để lấy tài liệu theo phiên bản. Lỗ hổng nằm ở tính năng mà Upstash gọi là Custom AI Instructions: chủ sở hữu thư viện gắn hướng dẫn vào một mục tài liệu, Context7 phục vụ hướng dẫn đó vào cửa sổ ngữ cảnh của mọi agent tra cứu thư viện, và không có gì trên đường dẫn đó làm sạch nó. Noma Security, nơi Eli Ainhorn, nhà nghiên cứu lỗ hổng AI cấp cao, được ghi nhận là người phát hiện, đã chứng minh rằng một mục bị đầu độc có thể khiến một agent được kết nối đọc các tệp .env trong thư mục gốc của dự án, gửi nội dung của chúng đến một kho lưu trữ GitHub do kẻ tấn công kiểm soát dưới dạng issue, và xóa các thư mục cục bộ với lý do “dọn dẹp” — tất cả chỉ từ một yêu cầu tài liệu thông thường. Không có nạn nhân nào được ghi nhận. Phần còn lại của các sự cố agent được ghi nhận, mỗi sự cố có mức độ nghiêm trọng, cấp độ tin cậy và cờ tranh chấp riêng, nằm trong kho lưu trữ sự cố AI, nơi có thể đọc các mục lân cận của bản ghi này ngay bên cạnh nó.

Máy chủ của Context7 nhỏ, và đó là phần đáng để hiểu trước tiên. Bài viết của Noma lưu ý rằng nó cung cấp hai công cụ, resolve-library-id và query-docs, và rằng nó không thể tự thực thi mã, ghi tệp hay truy cập mạng. Mọi tác động được ghi nhận đều do tác nhân ở đầu bên kia thực hiện, tác nhân này thực sự có quyền truy cập hệ thống tệp, shell và mạng trên máy của nhà phát triển. Sổ đăng ký npm cho thấy cơ sở cài đặt lớn đến mức nào: @upstash/context7-mcp đã được tải xuống 4.064.176 lần trong ba mươi ngày từ 22 tháng 7 đến 20 tháng 8 năm 2026, khoảng thời gian quanh thời điểm công bố.

Cơ chế: một thư viện bị đầu độc, mọi tác nhân truy vấn nó

Bản trình diễn của Noma, được mô tả trong bài viết ContextCrush của nó ngày 5 tháng 3 năm 2026, diễn ra theo ba bước mà agent thực hiện thay vì máy chủ. Nó đã đăng ký một thư viện trong sổ đăng ký của Context7 với các quy tắc bị đầu độc được gắn kèm. Các hướng dẫn trong những quy tắc đó chỉ dẫn agent tìm kiếm và đọc mọi .env tệp trong thư mục gốc dự án; các hướng dẫn tiếp theo chỉ dẫn nó đăng nội dung lên một kho lưu trữ GitHub do kẻ tấn công kiểm soát dưới dạng issue; một tập hợp cuối cùng bảo nó xóa các thư mục và tệp cục bộ để “dọn dẹp.” Yêu cầu kéo tất cả những điều này vào ngữ cảnh là một yêu cầu bình thường — nhờ trợ lý lập trình giúp đỡ với một thư viện.

Lý do khiến đây là vấn đề chuỗi cung ứng chứ không phải kiểu tấn công chèn prompt thông thường nằm ở chỗ nội dung độc hại được đặt ở đâu. Kẻ tấn công không bao giờ chạm được vào máy của nạn nhân và cũng không cần cài văn bản vào một tài liệu mà người dùng mở. Các chỉ dẫn bị đầu độc nằm trên chính registry của Context7, được hạ tầng của Context7 lưu trữ và phục vụ, và đến qua đúng kênh đáng tin cậy như tài liệu hợp lệ, không thể phân biệt với tài liệu đó. Noma lưu ý rằng điểm tin cậy của Context7, vốn đánh giá các thư viện dựa trên lịch sử GitHub đằng sau chúng, không phòng thủ được trước điều này, vì một tài khoản tồn tại lâu có thể bị mua, bị chiếm đoạt hoặc được tạo ra. Bản tóm tắt của chính công ty về điểm cấu trúc này rất thẳng thắn: “Bề mặt tấn công không phải là những gì máy chủ MCP có thể làm. Mà là những gì nó có thể khiến tác nhân AI làm.”

Hai điểm cho một lỗi

Bản khuyến nghị này mang CVSS 3.1 9.0 (nghiêm trọng) và CVSS 4.0 6.4 (trung bình). Cả hai vector đều do VulnCheck cung cấp với tư cách CNA thực hiện việc gán điểm, và NVD ghi nhận cả hai nguyên vẹn, quy từng vector cho VulnCheck. Sự chênh lệch này không phải là sai sót; đó là cách hai khung đánh giá quy cùng một mức thiệt hại cho những cỗ máy khác nhau. CVSS 3.1 đánh dấu Scope là Changed — tức là cuộc tấn công tiêm nhiễm vượt qua từ máy chủ sang máy của nhà phát triển và xa hơn nữa — và vì thế ghi nhận toàn bộ tác động cao về tính bảo mật, toàn vẹn và khả dụng của các năng lực của agent ở mức trọng số đầy đủ. CVSS 4.0 thay Scope bằng các chỉ số riêng cho hệ thống dễ bị tổn thương và hệ thống tiếp theo: nó ghi nhận không có tác động về tính bảo mật, toàn vẹn hay khả dụng đối với bản thân Context7 (VC:N/VI:N/VA:N) và tác động cao trên các hệ thống ở phía sau (SC:H/SI:H/SA:H), mà công thức của nó có trọng số nhẹ hơn. Máy chủ chỉ là kẻ chuyển phát, không phải nạn nhân.

Sự chia rẽ lan truyền vào các cơ sở dữ liệu. Bản tư vấn của GitHub, GHSA-97r6-3rgm-v39r, được công bố lúc 18:32 UTC ngày 18 tháng 8, nửa giờ sau CVE, và mức độ nghiêm trọng tóm tắt của nó ghi là trung bình mặc dù vectơ CVSS 3.1 trong cùng bản ghi cho điểm 9,0. Cơ sở dữ liệu lỗ hổng EU của ENISA phản chiếu mục này thành EUVD-2026-61099 và chỉ lưu điểm cơ sở 6,4 theo phiên bản 4.0. Bản ghi lưu trữ mà bài viết này theo dõi chấm sự cố ở mức cao — đây không phải một trong hai điểm đã công bố — và đó là xếp hạng của bản lưu trữ, không phải phép đo của chính nó.

HTML card titled 'One advisory, two scores', kicked 'OrcaRouter · AI incident archive · 2026-08-18', with the subtitle 'Identical facts, two severity bands apart. Both vectors were supplied by VulnCheck as the assigning CNA; NVD carries both unchanged and attributes each to VulnCheck'. Four chips read CVSS 3.1 9.0 critical, CVSS 4.0 6.4 medium, archive grade high and EPSS 0.49%. Three columns. 'Where the vectors agree' lists attack vector network with low complexity, privileges required low because the attacker needs a registry entry rather than the victim's machine, a routine documentation request as the trigger, and high confidentiality, integrity and availability impact in both frameworks. 'Where they diverge' lists CVSS 3.1 setting Scope to Changed and booking the jump to the developer's machine at full weight, CVSS 4.0 recording the vulnerable system as unharmed at VC:N, VI:N and VA:N, the same harms booked downstream at SC:H, SI:H and SA:H with less weight, and user interaction at required in 3.1 against passive in 4.0. 'How the databases record it' lists NVD keeping both vectors each tagged disclosure@vulncheck.com, GHSA-97r6-3rgm-v39r carrying a summary severity of medium while its own v3 vector reads 9.0, ENISA EUVD-2026-61099 storing 6.4 under version 4.0 only, and the archive grading the record high, which is neither score. A footer reads 'Sources: CVE-2026-75130 in the MITRE CVE Services record, 18 August 2026; NVD API; GitHub Advisory API; ENISA EUVD API. EPSS as recorded in ENISA's mirror.'

Một CVE được công bố vào tháng 8 cho một tiết lộ hồi tháng 3

Mã định danh CVE được đặt trước vào ngày 17 tháng 8 năm 2026 và được công bố lúc 18:02 UTC ngày 18 tháng 8, đây là ngày được ghi trong bản ghi. Vùng chứa CNA cũng mang một ngày thứ hai không xuất hiện trên các trang tổng hợp: datePublic, 5 tháng 3 năm 2026 — năm tháng rưỡi trước khi mã định danh tồn tại, và cùng ngày Noma xuất bản ContextCrush. Tài liệu tham chiếu kỹ thuật duy nhất của bản tư vấn là bài viết tháng Ba đó, mà VulnCheck gắn thẻ cho cả mô tả kỹ thuật và khai thác.

Dòng thời gian công bố của Noma giải thích khoảng trống đó. Nó báo cáo lỗ hổng cho Upstash vào ngày 18 tháng 2 năm 2026 với báo cáo đầy đủ và bằng chứng khái niệm, ghi nhận việc Upstash chấp nhận các phát hiện và bắt đầu khắc phục vào ngày 19 tháng 2, cho biết một bản vá đã "được triển khai lên môi trường sản xuất với việc làm sạch quy tắc và các rào chắn" vào ngày 23 tháng 2, đồng thời ấn định ngày công bố công khai và xác minh cuối cùng của Noma là ngày 5 tháng 3. Theo lời kể của Noma, lỗi hồi tháng Hai đã được giải quyết trong vài ngày.

Ngày tháng trên registry npm khớp với mốc thời gian đó theo cách khiến phạm vi bị ảnh hưởng trông kỳ lạ. @upstash/context7-mcp 2.1.2 được phát hành vào ngày 23 tháng 2 năm 2026 lúc 10:06 UTC, đúng ngày Noma nói rằng bản sửa đã lên production; dòng changelog của nó ghi “Xóa cảnh báo không cần thiết và cập nhật mô tả công cụ.” 2.1.3 tiếp theo vào ngày 4 tháng 3 năm 2026, một ngày trước bài viết của Noma, với ghi chú về việc từ chối các yêu cầu GET trên endpoint MCP và thêm trường source vào kết quả tìm kiếm. Không có ghi chú phát hành nào trong hai bản đề cập đến việc làm sạch, rào chắn an toàn hay cuộc tấn công injection. Phạm vi bị ảnh hưởng của CNA kết thúc ở 2.1.2, khiến 2.1.3 trở thành phiên bản đầu tiên nằm ngoài phạm vi đó.

Ba cách lý giải đều khớp với những ngày đó, và cả VulnCheck lẫn Noma đều không nêu rõ cách nào là đúng. Cách thứ nhất, được Digital Applied lập luận trong bài viết ngày 18 tháng 8 và được AI Security Wire nhắc lại vào ngày 22 tháng 8, cho rằng bản vá đã bị thoái hóa: bản dựng mang bản vá tháng Hai nằm trong khoảng bị ảnh hưởng của tháng Tám. Cách thứ hai là khoảng phiên bản chỉ được neo vào bản dựng mà nhà nghiên cứu đã kiểm thử, và rằng 2.1.3, được phát hành một ngày trước khi công bố, mới là ranh giới thực sự — một suy luận mà một số trình tổng hợp đưa ra một cách máy móc, bao gồm Feedly, nơi liệt kê “cập nhật lên phiên bản 2.1.3 hoặc mới hơn” như biện pháp giảm thiểu. Cách thứ ba là bản vá tháng Hai được áp dụng ở nơi các quy tắc được cung cấp thay vì trong gói client, trong trường hợp đó phạm vi phiên bản npm không hề mô tả bản vá. Một bản vá bảo mật âm thầm là chuyện đủ phổ biến đến mức việc thiếu một mục changelog tương ứng không kết luận được gì theo cả hai hướng.

HTML card titled 'Six months, one affected range', kicked '2026-08-18-context7-mcp-ti-shi-zhu · dates', subtitled 'Times UTC. Noma's disclosure timeline and the npm registry dates do not say what the 23 February fix changed, and no release note mentions sanitisation'. Four chips read 18 Feb 2026 reported to Upstash, 23 Feb 2026 fix live and npm 2.1.2, 5 Mar 2026 datePublic, and 18 Aug 2026 CVE published. Three columns. 'Noma's February timeline' lists 18 February discovery with the report and proof of concept delivered to Upstash, 19 February acceptance and remediation, 23 February deployment of a fix with rule sanitization and guardrails, and 23 February at 10:06 UTC the npm publication of 2.1.2 with a changelog reading 'Remove unnecessary warning and update tool descriptions'. 'The March boundary' lists 4 March at 12:51 UTC the npm publication of 2.1.3 whose changelog covers 405 handling for GET requests and a source field, 5 March publication of Noma's ContextCrush writeup with final verification, 5 March as the CNA's datePublic for the CVE, and the affected range ending at 2.1.2, which makes 2.1.3 the first build outside it. 'The August record' lists 17 August reservation of the identifier, 18 August at 18:02 UTC publication by VulnCheck as CNA, 18 August at 18:32 UTC the appearance of GHSA-97r6-3rgm-v39r with no version ranges, no fixed version in the CVE, the VulnCheck advisory or the GHSA, and NVD last modified 22 October at status Deferred with no CPE configurations. A footer reads 'Sources: MITRE CVE Services record for CVE-2026-75130; Noma Security, ContextCrush, 5 March 2026; npm registry version times; GitHub Advisory API; NVD API, read 29 October 2026.'

Điều gì đã được xác lập, và điều gì chưa.

• Được xác lập bởi bản ghi chính. Mã định danh CVE, ngày công bố 18 tháng 8, VulnCheck là CNA, phân loại CWE-1427 về việc trung hòa không đúng đầu vào được sử dụng cho lời nhắc LLM, ghi công Eli Ainhorn của Noma Security, và phạm vi bị ảnh hưởng của Context7 đến 2.1.2.

• Được xác lập bởi nghiên cứu của Noma. Đường dẫn chèn thông qua Custom AI Instructions, bằng chứng khái niệm gồm ba bước, quan sát rằng máy chủ chỉ cung cấp resolve-library-id và query-docs, và tuyên bố rằng không quan sát thấy bằng chứng nào về việc khai thác trong thực tế đối với lỗ hổng tháng Hai.

• Được cơ quan đăng ký thiết lập. Ngày phát hành 2.1.2 là 23 tháng 2 năm 2026, ngày phát hành 2.1.3 là 4 tháng 3 năm 2026, và một dòng gói kể từ đó đã tiến vượt qua 4.0 lên 4.4.4 vào ngày 19 tháng 10 năm 2026.

• Chưa xác định: liệu các bản build hiện tại có bị ảnh hưởng hay không. Không có nguồn nào nói rằng dòng 4.x bị ảnh hưởng, và cũng không có nguồn nào nói rằng dòng này an toàn. Bản ghi CVE, khuyến cáo của VulnCheck và khuyến cáo của GitHub đều không nêu phiên bản đã sửa, và danh sách các phạm vi phiên bản bị ảnh hưởng trong khuyến cáo của GitHub là trống.

• Chưa xác định: bất kỳ nạn nhân nào hoặc việc khai thác trong thực tế. Hồ sơ lưu trữ ghi nhận tác hại thực tế là sai. Việc CISA bổ sung dữ liệu cho hồ sơ vào ngày 19 tháng 8 đã chấm điểm Khai thác là “none”, Có thể tự động hóa là “no” và Tác động kỹ thuật là “total”; lỗ hổng này không nằm trong danh mục KEV; bản sao của ENISA ghi nhận EPSS là 0,49 phần trăm. Nghiên cứu của Noma là một bản trình diễn, không phải báo cáo sự cố.

• Chưa được xác lập: bản thân cách diễn giải về hồi quy. Nó dựa trên sự trùng hợp về ngày giữa dòng thời gian sửa lỗi và một bản phát hành npm, và không có nguồn sơ cấp nào khẳng định rằng cùng một đường dẫn mã đã thất bại hai lần.

HTML card titled 'What the record establishes, and what it does not', kicked 'Evidence ledger · CVE-2026-75130', subtitled 'The archive grades this record confidence A, disputed false, real harm false, AI involvement confirmed. Those are its fields; this is what they rest on'. Four chips read confidence A, disputed false, real harm false, AI involvement confirmed. Three columns. 'Established by primary sources' lists CVE-2026-75130 published 18 August 2026 with VulnCheck as CNA and CWE-1427, credit to Eli Ainhorn of Noma Security, an affected range of Context7 through 2.1.2, the injection path and three-step proof of concept as Noma describes them, and npm dates of 2.1.2 on 23 February, 2.1.3 on 4 March and latest 4.4.4 on 19 October 2026. 'Not established' lists whether the 4.x line is vulnerable or clear with no source saying either way, whether February's fix regressed or was never in the client package, any victim or in-the-wild use with CISA's SSVC recording exploitation none and the flaw absent from KEV, and a fixed version, which the CVE, the VulnCheck advisory and the GHSA all leave unnamed. 'What corroborates it' lists VulnCheck's advisory restating the CVE and adding the weakness class and credit, GHSA-97r6-3rgm-v39r as an alias of the same submission thirty minutes later, ENISA EUVD-2026-61099 mirroring the record along with the CVE aggregator pages, and two secondary write-ups restating it with no newsroom coverage found on 29 October 2026. A footer reads 'Sources agree because the GitHub and ENISA entries derive from the same VulnCheck submission, not because a second party measured the flaw.'

Sự chứng thực: nhắc lại, và im lặng ở nơi cần thiết

Các tài liệu đồng nhất với hồ sơ phần lớn đều bắt nguồn từ chính hồ sơ đó. Khuyến cáo của VulnCheck nhắc lại văn bản CVE và bổ sung phân loại điểm yếu cùng ghi nhận công lao của nhà nghiên cứu. Khuyến cáo trên GitHub là một bí danh của cùng một hồ sơ đăng ký, được công bố cùng buổi tối đó, không có phạm vi phiên bản và không có đánh giá độc lập. Mục của ENISA là một bản sao. Digital Applied, một trong hai nguồn mà kho lưu trữ trích dẫn, đã công bố phân tích của mình vào ngày 18 tháng 8 và cập nhật vào ngày 22 tháng 8 với các bản trích xuất registry mới; AI Security Wire đã công bố một bài viết thứ hai vào ngày 22 tháng 8. Cả hai đều nhắc lại khuyến cáo và chuyển tiếp suy luận hồi quy, và không bên nào tuyên bố đã xác minh độc lập.

Chúng tôi không tìm thấy bài đưa tin nào từ tòa soạn về CVE vào ngày 29 tháng 10 năm 2026 — không có bài nào từ BleepingComputer, The Register hay SecurityWeek — và các kết quả là những trang tổng hợp CVE chứ không phải bài báo. Việc thiếu vắng đó có ý nghĩa đối với cách đọc hồ sơ: kho lưu trữ chấm nó hạng A, được ghi chép đầy đủ với các nguồn sơ cấp đồng thuận, và các nguồn sơ cấp thực sự đồng thuận, nhưng sự đồng thuận ở đây là giữa một bản ghi CNA và nghiên cứu mà bản ghi đó trích dẫn, chứ không phải giữa hai phép đo độc lập. Một số trang tổng hợp bổ sung những tuyên bố mà nguồn của chúng không ủng hộ; chẳng hạn, mục của Feedly nêu rằng đã có bản vá và nêu tên 2.1.3, điều mà không có khuyến cáo nào nói, trong khi trang của VulDB trả về kiểm tra bot thay vì nội dung và hoàn toàn không thể đọc được.

Điều gì đã thay đổi, và điều gì thì không.

Đối với lỗi tháng 2, Upstash đã hành động chỉ trong vài ngày: được chấp nhận vào ngày 19 tháng 2, được sửa vào ngày 23 tháng 2, theo lời kể của Noma. Đối với hồ sơ tháng 8, tuyên bố duy nhất của nhà cung cấp mà CVE tham chiếu là một bài đăng LinkedIn của Upstash, được gắn thẻ ở đó là khuyến cáo của nhà cung cấp, mà chúng tôi không thể đọc nội dung nếu không có phiên đăng nhập. Không có khuyến cáo bảo mật GitHub nào trong phạm vi kho lưu trữ nêu phiên bản đã sửa, và mục NVD nằm ở trạng thái Deferred không có cấu hình CPE nào và lần sửa đổi cuối cùng là ngày 22 tháng 10 năm 2026, nên phân tích của chính NVD không nằm trong hồ sơ.

Bản thân gói vẫn tiếp tục được phát hành. Từ ngày 20 tháng 4 năm 2025 đến ngày 23 tháng 10 năm 2026, kho lưu trữ upstash/context7 đã phát hành 163 bản phát hành, và không có ghi chú nào của họ đề cập đến CVE này hoặc mô tả việc làm sạch các hướng dẫn tùy chỉnh mang nội dung injection. Đó là bản ghi về những gì những người bảo trì đã chọn ghi lại, không phải bằng chứng rằng không có gì được khắc phục.

Điều mà bản ghi để lại cho người vận hành là quản lý phơi nhiễm chứ không phải một dòng bản vá. Khuyến nghị của Noma tập trung vào việc rà soát các tích hợp MCP và kiểm tra những gì được truyền giữa agent và server trong lúc chạy; các hành động được OpenCVE đề xuất là nâng cấp, tắt hoặc hạn chế tính năng Custom AI Instructions, và thêm kiểm tra dữ liệu đầu vào cho server. Phiên bản vận hành của tất cả những điều đó là cùng ba bước: ghim phiên bản MCP server thay vì thả nổi theo bản latest, giữ thông tin xác thực production ra khỏi các tệp môi trường dạng văn bản thuần mà agent có thể đọc, và coi phản hồi của công cụ là dữ liệu đầu vào không đáng tin cậy thay vì là tài liệu mà agent có thể làm theo.

Mười tuần sau khi công bố, hồ sơ công khai vẫn dừng đúng ở chỗ nó đã dừng vào ngày 18 tháng 8: một mã định danh, hai điểm số lệch nhau hai dải, một phạm vi bị ảnh hưởng có cận trên là một bản dựng đã phát hành vào tháng 2, và không có bản vá nào được nêu tên. Bất kỳ ai phân loại CVE-2026-75130 đều phải quyết định dựa trên những gì các agent của họ có thể tiếp cận, vì hồ sơ không cho họ biết cần cài đặt phiên bản nào.