- Nhiều chiến dịch đã lạm dụng các gói và công cụ npm React Native đáng tin cậy, từ các thành phần giao diện người dùng đến các tiện ích dòng lệnh, thông qua việc chiếm đoạt tài khoản và sử dụng lỗi chính tả.
- Các tin tặc ngày càng triển khai phần mềm độc hại đa giai đoạn tinh vi bằng cách sử dụng Solana hoặc máy chủ điều khiển phi tập trung (C2), nhắm mục tiêu vào máy tính của nhà phát triển, các đường dẫn CI và dữ liệu ví hoặc thông tin đăng nhập.
- Các nhà cung cấp giải pháp bảo mật hiện đang dựa vào phân tích AI, kiểm tra thời gian chờ và kiểm soát đầu ra CI được tăng cường để phát hiện và ngăn chặn các cuộc tấn công chuỗi cung ứng này chỉ trong vài phút.
- Các nhóm phát triển React Native cần kết hợp việc quản lý phụ thuộc chặt chẽ, xác thực hai yếu tố (2FA) với npm, sử dụng lockfile và giám sát liên tục để giảm thiểu đáng kể rủi ro trong chuỗi cung ứng.
React Native đã trở thành một framework được ưa chuộng để xây dựng ứng dụng di động, điều này khiến hệ sinh thái npm của nó trở thành mục tiêu cực kỳ hấp dẫn đối với những kẻ tấn công muốn xâm nhập vào máy tính của nhà phát triển và các quy trình CI. Trong vài năm trở lại đây, một số chiến dịch tinh vi đã lợi dụng các gói React Native đáng tin cậy, các công cụ phổ biến xung quanh framework này, và thậm chí cả các tiện ích bị chiếm đoạt tên miền để cài đặt phần mềm độc hại, đánh cắp thông tin đăng nhập, rút tiền điện tử và phá hoại các dự án JavaScript trên quy mô lớn.
Nếu bạn xây dựng hoặc bảo trì các ứng dụng React Native hiện nay, việc chỉ "npm install và hy vọng mọi thứ sẽ ổn" là không còn đủ nữa. Nhiều nhóm tin tặc đang lợi dụng npm một cách có hệ thống, nhắm mục tiêu vào mọi thứ từ các thành phần giao diện người dùng đến các công cụ dòng lệnh, và thậm chí cả biểu đồ phụ thuộc bắc cầu ẩn sâu trong các tệp khóa của bạn. Bài viết này sẽ điểm qua các sự cố lớn đã biết, phân tích cách thức hoạt động của phần mềm độc hại và đưa ra các bước thực tế bạn có thể thực hiện để giảm thiểu tác động đến môi trường phát triển của mình.
Chiếm đoạt tài khoản và phần mềm độc hại trong các thành phần input của React Native
Một trong những sự cố đáng báo động nhất về chuỗi cung ứng trong thế giới React Native đã ảnh hưởng đến hai thành phần giao diện người dùng rất phổ biến dùng để chọn số điện thoại và quốc gia: react-native-international-phone-number và react-native-country-select. Cả hai gói phần mềm đều do cùng một tác giả duy trì (@AstroOnautangười dùng npm astroonauta), đã tích lũy hàng chục nghìn lượt tải xuống mỗi tuần và được nhúng vào nhiều ứng dụng di động đang được sử dụng.
Vào ngày 16 tháng 3 năm 2026, Package Analyst dựa trên trí tuệ nhân tạo của StepSecurity là công cụ đầu tiên phát hiện ra rằng các phiên bản mới của những thư viện này đột nhiên tích hợp thêm phần mềm độc hại trong quá trình cài đặt. Các bản phát hành bị ảnh hưởng ngay lập tức là react-native-international-phone-number@0.11.8 và react-native-country-select@0.3.91Các phiên bản sạch được xác nhận cuối cùng tại thời điểm đó là... 0.11.7 và 0.3.9 tương ứng.
Lỗ hổng bảo mật ban đầu (Đợt 1) cực kỳ đơn giản: một... preinstall kịch bản và một đoạn mã được mã hóa rất phức tạp install.js Tệp được đóng gói vào tệp nén tarball. Sự độc hại package.json Đoạn mã trông như thế này:
"scripts": { "preinstall": "node install.js" }
Vì các tập lệnh vòng đời npm chạy tự động trên npm installBất kỳ ai tải các phiên bản này – cục bộ hoặc trên CI – đều có thể chạy phần mềm độc hại mà không cần nhập bất kỳ mã nào. Không có thẻ Git, bản phát hành hoặc quy trình CI tương ứng nào được chạy cho các phiên bản bị xâm phạm, và gitHead Kết quả trùng khớp với bản phát hành thành công trước đó, một dấu hiệu mạnh mẽ cho thấy kẻ tấn công đã giành được quyền truy cập xuất bản trực tiếp vào tài khoản npm của người duy trì thay vì sửa đổi kho lưu trữ GitHub.
Dữ liệu lượt tải xuống vào thời điểm đó cho thấy tình hình có thể tồi tệ đến mức nào: ước tính khoảng 9,000 lượt tải xuống mỗi tuần cho react-native-country-select và hơn 20,000 cho react-native-international-phone-numberTổng cộng, cả hai ứng dụng đều có hơn 130,000 lượt tải xuống mỗi tháng. Đây chính xác là kiểu phụ thuộc có khối lượng lớn nhưng ít được chú ý, âm thầm ảnh hưởng đến hàng nghìn máy tính của nhà phát triển và hệ thống CI.
Cuộc tấn công ba đợt: từ cài đặt sẵn rõ ràng đến chuỗi phụ thuộc lén lút.
Chiến dịch tấn công các gói React Native này diễn ra theo ba đợt riêng biệt, mỗi đợt đều khó phát hiện hơn đợt trước trong khi vẫn sử dụng cùng một phần mềm độc hại cốt lõi. StepSecurity đã theo dõi diễn biến gần như theo thời gian thực và phối hợp với người bảo trì, nhưng kẻ tấn công liên tục giành lại hoặc duy trì quyền truy cập vào tài khoản npm bị xâm phạm.
Đợt 1 (16 tháng 3 năm 2026) tập trung vào phương pháp trực tiếp preinstall móc vào cả hai gói. Chỉ trong khoảng năm phút sau khi công bố, AI của StepSecurity đã gắn cờ các bản phát hành mới là lỗi nghiêm trọng và các vấn đề đã được mở trên GitHub: #165 cho react-native-international-phone-number và #11 cho react-native-country-selectNgười bảo trì đã phản hồi nhanh chóng, loại bỏ các phiên bản độc hại và phát hành phiên bản sạch. react-native-country-select@0.4.0Tổng thời gian từ khi phát hành đến khi ngừng hỗ trợ là khoảng 2 giờ 21 phút – khá nhanh so với tiêu chuẩn của hệ sinh thái.
Mặc dù vậy, kẻ tấn công vẫn không mất quyền kiểm soát thông tin đăng nhập npm, dẫn đến đợt tấn công thứ 2 vào ngày 17 tháng 3. Thay vì chèn lại một đoạn mã độc dễ nhận biết vào các gói chính, kẻ tấn công đã tạo ra hai gói phần mềm mới có phạm vi hoạt động như cơ sở hạ tầng ẩn:
@usebioerhold8733/s-format@2.0.1– một bản sao rỗng củastring-formatvới mộtpostinstall: "node init.js"kịch bản nhưng thiếuinit.jstập tin, vì vậy hook sẽ thất bại một cách âm thầm.@agnoliaarisian7180/string-argv@0.3.0– một gói gần như trống rỗng (README, LICENSE, package.json) mà mục đích thực sự duy nhất là phụ thuộc vào...@usebioerhold8733/s-format, với địa chỉ người bảo trì dựa trên ProtonMail.
Tối hôm đó, react-native-international-phone-number@0.12.1 đã được xuất bản cùng với @agnoliaarisian7180/string-argv@0.3.0 Được thêm vào như một phụ thuộc mới, một lần nữa mà không cần bất kỳ hoạt động GitHub Actions nào. Tại thời điểm đó, chuỗi tấn công đã được thiết lập nhưng ở trạng thái bất động, chờ đợi tải trọng được kích hoạt. Khi StepSecurity báo cáo sự bất thường, người duy trì đã xác nhận điều đã rõ ràng từ các bằng chứng: "tài khoản npm của tôi đã bị tấn công và thư viện đã bị chiếm đoạt".
Đợt 3 (ngày 18 tháng 3) đã chuyển đổi cơ sở hạ tầng được dàn dựng thành một chuỗi phân phối phần mềm độc hại đa lớp hoạt động tích cực và sau đó tinh chỉnh nó một cách nhanh chóng. Các phiên bản mới của cả gói chuyển tiếp và thư viện chính đã được cập nhật trong vòng chưa đầy một giờ, với việc kẻ tấn công liên tục cải tiến cách thức khởi chạy phần mềm độc hại.
Chuỗi cuối cùng trông như thế này:
react-native-international-phone-number@0.12.2/0.12.3 → @agnoliaarisian7180/string-argv@latest → @usebioerhold8733/s-format@latest → postinstall → node child.js → init.js (malware)
Kẻ tấn công đầu tiên đã kích hoạt phần mềm độc hại trong @usebioerhold8733/s-format@2.0.2 bằng cách thêm một đoạn mã lớn, khó hiểu init.js tệp tin giống hệt tệp tin trước đó từng byte một. install.js Từ đợt 1. Sau đó họ đã thay đổi postinstall để gọi child.js thay vì init.js, được phát hành 2.0.3 Với kịch bản bị thiếu (một lần chạy thử khác), và cuối cùng đã được xuất xưởng. 2.0.4 với một cái nhỏ child.js trình tải chỉ đơn giản là kiểm tra init.js và thực thi nó thông qua child_process.exec đồng thời loại bỏ các lỗi và đầu ra stderr.
Cùng một lúc, @agnoliaarisian7180/string-argv@0.3.1 đã chuyển sự phụ thuộc của nó vào s-format từ phiên bản được ghim sang "latest"và react-native-international-phone-number@0.12.2 đã làm như vậy với string-argv. Điều này tạo ra một chuỗi độc hại tự cập nhật, trong đó mỗi lần cài đặt gói chính đều tự động tải xuống phiên bản phần mềm độc hại mới nhất.
Ngoài ra, thẻ cào react-native-international-phone-number@0.12.3 Đã loại bỏ hook preinstall không cần thiết (để trông gọn gàng hơn), giữ nguyên chuỗi phụ thuộc độc hại và thay đổi email của người bảo trì npm thành một tài khoản ProtonMail khác không thuộc sở hữu của tác giả ban đầu. Đó là dấu hiệu rõ ràng cho thấy kẻ tấn công đang củng cố quyền kiểm soát lâu dài đối với danh tính npm, chứ không chỉ đơn thuần là tái sử dụng một mã thông báo bị rò rỉ một cách cơ hội.
Bên trong phần mềm độc hại do Solana hậu thuẫn nhắm mục tiêu vào các nhà phát triển React Native.
Về bản chất, phần mềm độc hại đa giai đoạn tinh vi được sử dụng trong cả ba đợt tấn công đều lợi dụng chuỗi khối Solana như một kênh điều khiển và chỉ huy động. Cơ chế phân phối liên tục thay đổi, nhưng "vũ khí" vẫn giữ nguyên như cũ trong tất cả các phiên bản, thậm chí từng byte một cũng giống hệt nhau khi được chuyển từ cơ sở hạ tầng Wave 1 sang Wave 3.
Kịch bản bắt đầu với độ trễ cố ý 10 giây bằng cách sử dụng setTimeoutmột thủ thuật né tránh kinh điển trong chế độ chơi tự do. Nhiều hệ thống hộp cát tự động và công cụ bảo mật chỉ cho phép các kịch bản thực thi trong một khoảng thời gian ngắn trước khi quyết định rằng không có gì đáng ngờ xảy ra, vì vậy phần mềm độc hại chỉ cần chờ đợi cho đến khi hết thời gian đó trước khi thực hiện bất kỳ hành động nào đáng chú ý.
Tiếp theo, nó thực hiện bộ lọc địa lý để tránh lây nhiễm vào các hệ thống ở Nga và một số khu vực thuộc CIS. Nó kiểm tra các biến môi trường như... LANG, LANGUAGE, LC_ALLThông tin người dùng máy chủ, múi giờ hệ thống và thậm chí cả độ lệch UTC thô, tìm kiếm các giá trị cho biết ngôn ngữ địa phương của Nga (chẳng hạn như ru_RU or Russian) hoặc một trong danh sách các múi giờ của Nga/CIS. Nếu bất kỳ múi giờ nào trùng khớp, chương trình sẽ thoát ngay lập tức và im lặng.
Chỉ khi môi trường vượt qua được bước kiểm tra đó thì phần mềm độc hại mới bắt đầu giao tiếp với chuỗi khối Solana. Nó lưu trữ địa chỉ ví được mã hóa cứng và truy vấn địa chỉ đó thông qua... getSignaturesForAddress Phương thức JSON-RPC được sử dụng trên chín điểm cuối Solana RPC khác nhau do nhiều nhà cung cấp lưu trữ. Thiết kế này mang lại cho kẻ tấn công tính khả dụng cao và khiến việc chặn tên miền hoặc địa chỉ IP đơn giản trở nên không hiệu quả.
Thủ đoạn của kẻ tấn công là giấu URL của tải trọng giai đoạn tiếp theo bên trong trường ghi chú của các giao dịch Solana đến ví đó. Bản ghi nhớ lưu trữ một khối dữ liệu JSON được mã hóa base64, trong đó link Trường này chứa URL của giai đoạn tiếp theo. Bằng cách đăng một giao dịch mới, người vận hành có thể xoay vòng URL dữ liệu bất cứ lúc nào mà không cần sửa đổi các gói npm đã được công bố.
Sau khi trích xuất URL, phần mềm độc hại sẽ thực hiện yêu cầu HTTP đến máy chủ của kẻ tấn công tại địa chỉ sau: http://45.32.150.251/, gửi loại hệ điều hành theo cách tùy chỉnh os phần tiêu đề để C2 có thể trả về các tệp nhị phân dành riêng cho nền tảng. Phần thân phản hồi chứa dữ liệu được mã hóa, nhưng khóa AES-256 và IV cần thiết để giải mã chỉ được gửi trong tiêu đề HTTP (secretkey và ivbase64), vì vậy bất kỳ dữ liệu cơ thể nào được lưu vào bộ nhớ đệm hoặc bị chặn đều vô dụng nếu đứng riêng lẻ.
Giai đoạn giải mã thứ hai không bao giờ truy cập vào ổ đĩa; nó được thực thi trong bộ nhớ. eval(atob(...)) trên các hệ thống giống Unix hoặc thông qua vm.Script Trên Windows với quyền truy cập đầy đủ vào các thành phần nội bộ của Node. Sau đó, phần mềm độc hại sẽ thả một tệp tin. ~/init.json Tệp đánh dấu lưu trữ dấu thời gian và mã định danh duy nhất để cùng một máy không bị nhiễm lại nhiều hơn một lần trong vòng 48 giờ. Giới hạn tốc độ này giúp giảm đáng kể nhiễu và cung cấp cho phần mềm diệt virus ít dấu hiệu hành vi hơn để bám vào.
Đoạn mã độc giai đoạn ba được giải mã bằng AES, do các nhà nghiên cứu thu hồi bằng cách phát lại các bước Solana và HTTP tương tự, là một công cụ đánh cắp thông tin đăng nhập và ví điện tử tập trung vào hệ điều hành Windows, đồng thời cũng là một công cụ tải mã độc. Nó thiết lập sự bền bỉ với schtasks và Run khóa đăng ký, tải xuống các mô-đun được mã hóa bổ sung từ 45.32.150.251và chuyển số chiến lợi phẩm thu được đến một địa chỉ IP trong dải 217.69.3.x.
Phần mềm độc hại này sẽ tìm kiếm dữ liệu từ các ví điện tử trên máy tính để bàn và các tiện ích mở rộng trình duyệt như MetaMask, Phantom, Exodus, Atomic, Guarda, Coinomi, Daedalus, OKX Wallet, Trust Wallet, Braavos và nhiều ứng dụng khác, bằng cách duyệt qua các thư mục hồ sơ trình duyệt và thư mục ví cục bộ sau khi buộc đóng Chrome và Firefox. Hơn nữa, nó còn lấy trực tiếp các token npm và thông tin đăng nhập GitHub từ các công cụ cấu hình và hỗ trợ thông tin đăng nhập cục bộ, biến các máy tính của nhà phát triển bị xâm nhập thành bệ phóng hoàn hảo cho các cuộc tấn công chuỗi cung ứng tiếp theo.
Đáng chú ý, phần mềm độc hại này thậm chí còn tải xuống các môi trường chạy Node.js (v22.9.0) riêng của nó cho cả x86 và x64 vào hệ thống. %APPDATA%\_node_x86 và %APPDATA%\_node_x64, Đảm bảo môi trường thực thi nhất quán ngay cả khi Node không được cài đặt trên hệ thống mục tiêu.
Các liên kết đến ForceMemo và tác nhân đe dọa GlassWorm
Dấu vết kỹ thuật của sự cố React Native npm này gần như trùng khớp hoàn toàn với một chiến dịch trước đó có tên gọi “ForceMemo”, đã làm tổn hại hàng trăm kho lưu trữ Python trên GitHub. Cả hai chiến dịch đều sử dụng Solana làm máy chủ C2 nhận thông tin bí mật, cùng một nhóm chín điểm cuối RPC, cùng định dạng ghi nhớ JSON với một link lĩnh vực, logic lọc địa lý Nga/CIS giống hệt nhau, như nhau ~/init.json Khóa duy trì và thậm chí cả các phạm vi cơ sở hạ tầng tương tự được lưu trữ trên Vultr.
Mặc dù địa chỉ ví Solana khác nhau giữa hai chiến dịch, nhưng mọi dấu hiệu khác đều chỉ ra một tác nhân duy nhất có năng lực cao, được cho là nhóm có tên GlassWorm. ForceMemo nhắm mục tiêu vào các nhà phát triển thông qua các kho lưu trữ GitHub bị nhiễm độc, trong khi sự cố React Native lại làm điều đó thông qua các gói npm và chuỗi phụ thuộc của chúng. Chiến lược rất rõ ràng: tái sử dụng một khung phần mềm độc hại tinh vi, có tính mô-đun cao nhưng tích hợp nó vào các kênh phân phối khác nhau để tiếp cận càng nhiều môi trường phát triển càng tốt.
Các chiến dịch độc hại khác của npm liên quan đến React Native và JavaScript.
Lỗ hổng bảo mật AstroOnauta chỉ là một phần nhỏ trong làn sóng tấn công dựa trên npm rộng lớn hơn, ảnh hưởng trực tiếp hoặc gián tiếp đến các ứng dụng React Native. Một số nhà cung cấp bảo mật đã ghi nhận các chiến dịch song song tập trung vào thư viện giao diện người dùng React Native, công cụ CLI cốt lõi và thậm chí cả các plugin xây dựng chung mà nhiều cơ sở mã React Native phụ thuộc vào.
Vào tháng 6 năm 2025, Aikido Security đã phát hiện một hoạt động tấn công chuỗi cung ứng quy mô lớn, cài đặt cửa hậu vào ít nhất 16 gói liên quan đến React Native. @react-native-aria/* phạm vi cộng @gluestack-ui/utilsTổng cộng có khoảng một triệu lượt tải xuống mỗi tuần. Vụ xâm nhập ban đầu xảy ra vào ngày 6 tháng 6 năm 2025, bắt đầu với... @react-native-aria/focus@0.2.10Sau đó, vào ngày 7 tháng 6, nó nhanh chóng được mở rộng sang các gói bổ sung như focus, overlay, interaction, toggle, switch, checkbox, radio, button, menu, listbox, tabs, combobox, disclosure, slider, separator và các tiện ích của GlueStack.
Phần mềm độc hại trong chiến dịch đó là một Trojan truy cập từ xa (RAT) được thiết kế riêng cho môi trường Windows, có khả năng tồn tại lâu dài dưới dạng hệ điều hành Windows. %LOCALAPPDATA%\Programs\Python\Python3127 và kết nối với máy chủ C2 tại 136.0.9[.]8 và 85.239.62[.]36. Nó có khả năng thực thi lệnh tùy ý, tải lên/tải xuống tập tin và truy cập từ xa lâu dài. Khả năng tồn tại lâu dài có nghĩa là việc chỉ nâng cấp lên phiên bản sạch của thư viện React Native không thể loại bỏ hoàn toàn các máy đã bị nhiễm.
Một chiến dịch kéo dài khác bị Nhóm Nghiên cứu Mối đe dọa của Socket phát hiện đã sử dụng kỹ thuật typosquatting và mimicry để cài đặt các gói phần mềm độc hại nhắm mục tiêu cụ thể vào các framework JavaScript phổ biến như React, Vue, Vite và Quill. Kẻ tấn công sử dụng bí danh npm. xuxingfengNgười này đã phát hành hỗn hợp các gói phần mềm hợp pháp và độc hại trong hơn hai năm, tạo ra ấn tượng bề ngoài là một người duy trì đáng tin cậy.
Các gói như vite-plugin-bomb, vite-plugin-bomb-extend, vite-plugin-react-extend, vite-plugin-vue-extend và vue-plugin-bomb Chúng được thiết kế không phải để đánh cắp dữ liệu mà để chủ động làm hỏng hoặc phá hủy các dự án. Họ thực hiện các cuộc tấn công nhiều giai đoạn được kích hoạt bởi các ngày cụ thể, xóa các tệp khung quan trọng. node_modules (Vue, React, Vite, TypeScript, Ant Design Vue, Pinia, ECharts và nhiều công nghệ khác), đôi khi kết hợp với việc buộc hệ thống tắt mỗi giây bằng cách sử dụng shutdown -s -t 5.
Một gói hàng đặc biệt khó chịu, js-hood, đã can thiệp vào các nguyên mẫu JavaScript cốt lõi như Array.prototype.filter, map, push, pop và nhiều String phương phápThay thế chúng bằng các hàm trông có vẻ hợp lệ về mặt cú pháp nhưng lại trả về dữ liệu ngẫu nhiên. Điều này dẫn đến các ứng dụng vẫn tiếp tục chạy nhưng tạo ra kết quả bị lỗi, không xác định và cực kỳ khó gỡ lỗi.
quill-image-downloader Loạt phim đã đi theo một hướng khác, tập trung vào việc phá hoại bộ nhớ phía máy khách. Nó sử dụng kiến trúc ba tập tin, sau một ngày kích hoạt nhất định, sẽ lặp lại tất cả các khóa trong đó. localStorage, sessionStorage và cookie, sau đó mã hóa một phần giá trị của chúng bằng các ký tự ngẫu nhiên trong khi vẫn giữ nguyên cấu trúc. Mã xác thực, giỏ hàng, tùy chọn người dùng và bất kỳ trạng thái nào phía trình duyệt đều bị lỗi một cách tinh vi, gây ra các sự cố gián đoạn mà nhiều nhóm ban đầu cho rằng là do lỗi ứng dụng.
Một nghiên cứu riêng biệt từ OP Innovate đã phát hiện ra một nhóm gồm mười gói npm độc hại giả mạo các thư viện nổi tiếng như TypeScript, discord.js, ethers.js, nodemon, react-router-dom và zustand. Sau khi cài đặt, các gói phần mềm này sẽ hiển thị cửa sổ CAPTCHA giả mạo, thu thập thông tin máy chủ và tải xuống một phần mềm đánh cắp thông tin đa nền tảng quy mô lớn từ máy chủ điều khiển (C2). 195.133.79.43Một lần nữa, với sự hỗ trợ rõ ràng cho Windows, macOS và Linux.
Cuối cùng, chiến dịch CanisterWorm, được Aikido mô tả chi tiết, đã chứng minh mức độ mà tin tặc sẵn sàng khai thác npm như một phương tiện phân phối. Hơn 135 gói phần mềm từ một tài khoản nhà xuất bản bị xâm nhập đã bị cài đặt các tập lệnh chạy trong quá trình cài đặt, thực thi trước bất kỳ mã ứng dụng hoặc bước xây dựng nào của bạn. Các giai đoạn sau hoạt động khác nhau tùy thuộc vào việc chúng được cài đặt trên máy phát triển cục bộ, tác vụ CI hay nút xây dựng trong container, và chúng giao tiếp với một máy chủ Internet phi tập trung (ICP) hoạt động như một máy chủ C2 bí mật – cho phép người điều hành thay đổi hành vi ngay lập tức mà không cần chạm vào kho lưu trữ npm nữa.
Các lỗ hổng nghiêm trọng trong công cụ React Native: Lỗ hổng thực thi mã từ xa (RCE) trong Community CLI
Không phải tất cả các rủi ro bảo mật của React Native đều đến từ các gói phần mềm độc hại; một số rủi ro bắt nguồn từ các lỗ hổng nghiêm trọng trong các công cụ được sử dụng rộng rãi. Một trường hợp đáng chú ý là CVE‑2025‑11953 trong React Native Community CLI, một gói được các nhà phát triển trên Windows, macOS và Linux tải xuống hàng triệu lần mỗi tuần.
Lỗ hổng này cho phép thực thi mã từ xa (RCE) mà không cần xác thực thông qua các yêu cầu POST được tạo sẵn gửi đến máy chủ phát triển cục bộ được khởi chạy bởi giao diện dòng lệnh (CLI). Vì nhiều nhà phát triển cho phép truy cập máy chủ metro/dev của họ trên mạng để gỡ lỗi hoặc kiểm tra thiết bị di động, kẻ tấn công ở gần đó (hoặc ai đó có thể định tuyến lưu lượng truy cập đến các cổng đó) có thể chạy các lệnh tùy ý trên máy của nhà phát triển.
Tác động của nó vượt xa phạm vi một máy trạm của nhà phát triển: Một khi kẻ tấn công có quyền thực thi mã trên máy tính phát triển, chúng có thể chuyển hướng sang mạng lưới doanh nghiệp, đánh cắp thông tin đăng nhập, làm hỏng các bản dựng hoặc thao túng các đường dẫn CI/CD được đồng bộ từ máy đó. Đây là một ví dụ điển hình về việc "chỉ một công cụ phát triển cục bộ" cũng có thể trở thành một phần của bề mặt tấn công trong môi trường sản xuất khi bạn làm việc trên các hệ thống kết nối đám mây.
Giải pháp giảm thiểu được khuyến nghị rất đơn giản nhưng không thể thương lượng: cập nhật lên React Native Community CLI 12.5.1 trở lên, kiểm tra nhật ký để tìm các yêu cầu POST đáng ngờ hoặc các tiến trình không mong muốn được khởi tạo bởi máy chủ phát triển, hạn chế quyền truy cập vào các máy chủ cục bộ và tích hợp công cụ phát triển vào chiến lược phát hiện mối đe dọa của bạn. Hãy coi bất kỳ thiết bị đầu cuối nào của nhóm DevOps hoặc nhà phát triển là mục tiêu có giá trị cao, bởi vì đó chính xác là cách mà những kẻ tấn công hiện đại nhìn nhận chúng.
Cách các nhà phòng thủ phản ứng: Phân tích AI, thời gian hồi chiêu và CI được tăng cường.
Điểm tích cực trong những câu chuyện này là cộng đồng bảo mật đang ngày càng nhanh nhạy và tinh vi hơn trong việc phát hiện các mối đe dọa chuỗi cung ứng nhắm vào React Native và toàn bộ không gian JavaScript. Các công cụ như StepSecurity, Socket và Aikido Security đầu tư mạnh vào phân tích hành vi, so sánh tự động và các mô hình học máy có khả năng quét các bản phát hành npm mới chỉ vài phút sau khi xuất bản.
Trong vụ tấn công AstroOnauta, AI Package Analyst của StepSecurity đã phát hiện các phiên bản độc hại trong vòng chưa đầy năm phút, mở các vấn đề trên GitHub với đầy đủ phân tích kỹ thuật và sau đó báo cáo các gói cơ sở hạ tầng bị nhắm mục tiêu của kẻ tấn công cho npm để gỡ bỏ. Nhóm đã ghi lại chi tiết từng đợt tấn công, theo dõi các nhánh git, phân tích mã nguồn bị làm mờ, chứng minh việc sử dụng Solana C2 và cung cấp hướng dẫn khắc phục từng bước cho người bảo trì.
Bên cạnh việc phát hiện, các biện pháp kiểm soát phòng ngừa đang dần được chú trọng trong các quy trình CI. Ví dụ, tính năng Kiểm tra thời gian chờ của gói npm của StepSecurity cho phép các tổ chức chặn các phụ thuộc được phát hành chỉ vài giờ trước đó, tạo thời gian cho các phần mềm quét và con người kiểm tra chúng. Tính năng kiểm tra cập nhật bị xâm phạm của họ đối chiếu với nguồn cấp dữ liệu được cập nhật liên tục về các gói độc hại đã biết và từ chối các yêu cầu kéo (PR) cố gắng thêm hoặc nâng cấp chúng.
Các công cụ nhận biết mạng như Harden-Runner hạn chế các kết nối đi ra trong GitHub Actions và các tác vụ CI khác chỉ cho phép các điểm cuối được mong đợi trong danh sách cho phép. Trong một thế giới mà phần mềm độc hại lấy dữ liệu từ các node RPC của Solana, URL Lịch Google, dải IP của Vultr hoặc các canister ICP, việc khóa chặt quyền truy cập ra khỏi hệ thống xây dựng của bạn có thể tạo nên sự khác biệt giữa một lỗi so sánh gói phần mềm và một cuộc xâm nhập quy mô lớn.
Về phía phản hồi, các tính năng như tìm kiếm gói hàng trên toàn tổ chức và trung tâm theo dõi mối đe dọa giúp các nhóm nhanh chóng xác định phạm vi ảnh hưởng. Ngay khi phát hiện một gói hoặc plugin React Native bị xâm phạm, các nhóm bảo mật có thể xem những kho lưu trữ, nhánh và tệp khóa nào chứa nó, những tác vụ nào đã thực thi nó và máy nào đã liên lạc với các địa chỉ IP đáng ngờ - và sau đó ưu tiên khắc phục sự cố tương ứng trên hàng chục hoặc hàng trăm cơ sở mã.
Các biện pháp thiết thực dành cho các nhóm React Native khi đối mặt với phần mềm độc hại npm.
Đối với cả các nhà phát triển React Native và các kỹ sư bảo mật, việc phòng chống các cuộc tấn công cấp độ npm đòi hỏi sự kết hợp giữa việc đảm bảo vệ sinh trên từng máy riêng lẻ với các biện pháp bảo vệ trong CI/CD và quản lý phụ thuộc. Không có biện pháp kiểm soát đơn lẻ nào có thể cứu bạn hoàn toàn, nhưng việc áp dụng nhiều lớp phòng thủ sẽ làm giảm đáng kể khả năng một gói phần mềm độc hại dẫn đến việc hệ thống bị xâm nhập hoàn toàn.
Nếu bạn sử dụng các gói phần mềm bị xâm phạm như đã đề cập trước đó, cần thực hiện một số bước kiểm tra ngay lập tức. Đối với sự cố Astronauta, hãy ghim react-native-international-phone-number sang phiên bản 0.11.7 và react-native-country-select đến 0.4.0, tránh tất cả các phiên bản bị gắn cờ là độc hại hoặc giải quyết thành @latest Hiện tại, phiên bản đó tương ứng với một bản phát hành bị lỗi.
Kiểm tra thư mục chính của bạn để tìm một tệp có tên init.json trong hồ sơ người dùng (ví dụ: ~/init.json trên Unix và ~\init.json trên Windows). Sự hiện diện của nó cho thấy phần mềm độc hại dựa trên Solana đã được thực thi ít nhất một lần. Đồng thời, hãy kiểm tra nhật ký mạng đi ra từ máy trạm của nhà phát triển và trình chạy CI để tìm các kết nối đến 45.32.150.251, các điểm cuối RPC của Solana được sử dụng trong các chiến dịch, hoặc các địa chỉ C2 khác đã được đề cập trước đó (ví dụ: 136.0.9[.]8, 85.239.62[.]36, 195.133.79.43, 217.69.3.152).
Kiểm tra node_modules và các tệp khóa cho các phụ thuộc dễ nhận biết như @agnoliaarisian7180/string-argv, @usebioerhold8733/s-format và sự độc hại @react-native-aria/* or @gluestack-ui/utils Các phiên bản được liệt kê trong thông báo. Nếu phát hiện bất kỳ dấu hiệu nào trong số đó, hãy coi máy đó là có khả năng bị xâm nhập và thay đổi tất cả thông tin đăng nhập nhạy cảm: mã thông báo npm, mã thông báo truy cập GitHub, khóa SSH, khóa nhà cung cấp dịch vụ đám mây và bất kỳ bí mật nào có trong hệ thống. .env hoặc các tệp cấu hình trong quá trình cài đặt.
Hướng tới tương lai, hãy củng cố vị thế chuỗi cung ứng của bạn cho công việc liên quan đến React Native: luôn cam kết và thực thi các tệp khóa (package-lock.json, yarn.lock, pnpm-lock.yaml), bật xác thực hai yếu tố (2FA) cho tất cả các tài khoản npm có quyền xuất bản và cấu hình CI của bạn để báo lỗi khi các phụ thuộc mới xuất hiện mà không được xem xét. Hãy cân nhắc chạy với --ignore-scripts Khi cài đặt các gói của bên thứ ba trong môi trường không đáng tin cậy, hãy tích hợp các công cụ quét phụ thuộc vào cả quy trình làm việc cục bộ và CI.
Cuối cùng, hãy coi môi trường phát triển – đặc biệt là những môi trường được sử dụng cho các ứng dụng React Native kết nối giữa API di động, web và backend – như một phần của bề mặt tấn công trong môi trường sản xuất. Cho dù mối đe dọa là việc chiếm đoạt tài khoản và cài đặt phần mềm độc hại được Solana hậu thuẫn vào thành phần nhập liệu của điện thoại, hay là một plugin Vite bị lỗi chính tả xóa React khỏi hệ thống. node_modulesCho dù đó là một lỗ hổng tích hợp Quill độc hại làm xáo trộn dữ liệu lưu trữ phía máy khách, hay một lỗ hổng thực thi mã từ xa (RCE) trong React Native Community CLI, điểm chung là hiện nay kẻ tấn công coi các công cụ dành cho nhà phát triển là một trong những con đường hiệu quả nhất để xâm nhập vào những tài sản quý giá nhất của tổ chức bạn.


