Ngày 25/10/2026, BIDV, VietinBank và Agribank cùng khuyến cáo khách hàng dùng iPhone cập nhật iOS vì mã độc DarkSword. DarkSword thực chất là gì, iPhone nào thật sự bị ảnh hưởng, và bạn cần làm gì? Trả lời ngắn: đó là một chuỗi sáu lỗ hổng iOS, đều đã được vá từ nhiều tháng trước, chiếm quyền một iPhone chưa cập nhật chạy iOS 18.4 đến 18.7 chỉ khi máy mở một trang web có cài bẫy. Phần mới là biến thể P7, chuyên lấy mật khẩu trong Keychain và ví tiền mã hoá.
Mình đã đọc các báo cáo gốc của Google Threat Intelligence Group, iVerify và Apple, rồi gom lại một chỗ: dòng thời gian, chuỗi khai thác chạy thế nào, từng payload lấy gì, cách kiểm tra máy của bạn, và người làm website rút ra được gì.
DarkSword trong một đoạn
DarkSword là một bộ khai thác trọn chuỗi (full-chain exploit kit) cho iOS: đi từ "Safari tải một trang" tới "kẻ tấn công có quyền kernel" mà người dùng không cần chạm vào gì. Nhóm tình báo mối đe doạ của Google (GTIG) đặt tên theo chuỗi ký tự tìm thấy trong payload thu được, và công bố phân tích vào tháng 3/2026. Nó dùng sáu lỗ hổng, ba trong số đó là zero-day lúc bị khai thác lần đầu, và hỗ trợ iOS 18.4 đến 18.7. Điểm khác thường: toàn bộ chuỗi khai thác và mọi payload GTIG thu được đều viết bằng JavaScript. Điều này ảnh hưởng cả cách nó chạy lẫn tốc độ nó lan ra.
Dòng thời gian: từ zero-day cuối 2025 tới cảnh báo của ngân hàng Việt Nam
| Thời điểm | Sự kiện |
|---|---|
| 11/2025 | GTIG ghi nhận các chiến dịch đầu tiên: một trang giả mạo Snapchat nhắm vào Ả Rập Xê Út, và một công ty giám sát của Thổ Nhĩ Kỳ (PARS Defense) nhắm vào Thổ Nhĩ Kỳ |
| 11–12/2025 | GTIG báo lỗi cho Apple; phần lớn được vá trong iOS 26.1 và 18.7.2 (tháng 11), 26.2 và 18.7.3 (tháng 12) |
| 12/2025 | Một nhóm gián điệp bị nghi là của Nga (UNC6353) dùng DarkSword trên các website Ukraine bị xâm nhập |
| 1/2026 | PARS Defense chạy chiến dịch ở Malaysia |
| 11/2/2026 | iOS 26.3 vá lỗi cuối cùng, nằm trong dyld |
| 18–19/3/2026 | GTIG, iVerify và Lookout công bố báo cáo |
| Cuối 3/2026 | Một bản sao của bộ công cụ bị đăng lên GitHub (heise); Apple phát hành iOS 18.7.7 |
| 1/4/2026 | Apple mở iOS 18.7.7 cho nhiều máy hơn để người dùng iOS 18 bật cập nhật tự động nhận được bản vá (Apple) |
| 8/2026 | iVerify phát hiện biến thể mới, P7, trên iPhone của một nhân viên tổ chức tài chính |
| 8–9/10/2026 | iVerify công bố phân tích P7 |
| 24–25/10/2026 | VietinBank, BIDV và Agribank cảnh báo khách hàng (CafeF) |
Các ngân hàng đang cảnh báo về một mối đe doạ đã được vá gần một năm. Rủi ro nằm ở số lượng lớn điện thoại chưa bao giờ cài các bản cập nhật đó. Theo bài phân tích của Kaspersky, Apple ước tính khoảng một phần tư số thiết bị đang hoạt động vẫn chạy iOS 18 trở xuống.
Chuỗi khai thác: sáu lỗi đi từ một trang web tới kernel
Mỗi bước cho kẻ tấn công thêm một phần quyền trên máy. Bảng dưới theo phân tích của GTIG:
| Bước | CVE | Thành phần | Zero-day | Vá trong |
|---|---|---|---|---|
| Chạy code trong Safari (trước 18.6) | CVE-2025-31277 | JIT của JavaScriptCore | Không | iOS 18.6 |
| Chạy code trong Safari (18.6–18.7) | CVE-2025-43529 | Bộ thu gom rác của JavaScriptCore | Có | 18.7.3, 26.2 |
| Vượt cơ chế xác thực con trỏ (PAC) | CVE-2026-20700 | dyld |
Có | 26.3 |
| Thoát sandbox nội dung web sang tiến trình GPU | CVE-2025-14174 | ANGLE (WebGL) | Có | 18.7.3, 26.2 |
Thoát từ tiến trình GPU sang mediaplaybackd |
CVE-2025-43510 | Kernel XNU, copy-on-write | Không | 18.7.2, 26.1 |
| Đọc/ghi bộ nhớ kernel | CVE-2025-43520 | Kernel XNU, race condition trong VFS | Không | 18.7.2, 26.1 |
Chỉ một lỗi trình duyệt thì kẻ tấn công mới vào được tiến trình nội dung web của Safari, vốn bị sandbox rất chặt. Hai lần thoát sandbox và lỗi kernel mới biến điều đó thành quyền đọc tin nhắn, Keychain và dữ liệu của app khác. Vì vậy chỉ cần vá một mắt xích là chuỗi này gãy, và một máy đã cập nhật đầy đủ thì chuỗi này không chạm tới được.
Vì sao viết bằng JavaScript lại quan trọng
GTIG không tìm thấy file thực thi native nào trong các mẫu. Khi đã đọc/ghi được bộ nhớ, các bước sau nạp một bản sao của engine JavaScript vào trong mediaplaybackd và tiếp tục chạy bằng JavaScript, gọi hàm native qua các đối tượng trung gian. Có hai hệ quả.
Thứ nhất, chuỗi khai thác không cần vượt qua các lớp bảo vệ của Apple chống chạy code native chưa ký (PPL và SPTM), vì nó không chạy code native nào. Nó dùng lại code Apple đã ký sẵn.
Thứ hai, nó dễ bị sao chép và sửa lại. Một exploit JavaScript là văn bản đọc được. Kaspersky cho biết kẻ tấn công để nguyên mã nguồn trên các website bị nhiễm, và một bản sao xuất hiện trên GitHub chỉ vài ngày sau khi công bố. Một nhà nghiên cứu của iVerify nói với TechCrunch rằng nó "có thể bị dùng lại quá dễ dàng". Đó là cách một công cụ bán cho khách hàng giám sát cuối cùng lại nằm trong các chiến dịch nhắm vào người bình thường để tìm ví tiền mã hoá.
Có một điểm tốt. Theo Kaspersky, mã độc này không ghi file (fileless) và không tồn tại qua lần khởi động lại. Khởi động lại máy chấm dứt lây nhiễm, nhưng không lấy lại được những gì đã bị gửi đi.
Nạn nhân bị dẫn tới exploit thế nào: watering hole và quảng cáo
Không ai bị gửi app độc hại cả. Bộ công cụ được phục vụ từ trang web: một trang giả mạo, trang do kẻ tấn công sở hữu, hoặc một website hợp pháp bị chèn thêm đúng một thẻ <script> (kiểu tấn công "watering hole", đầu độc nơi nạn nhân hay lui tới). Theo các bài tổng hợp báo cáo của iVerify, nạn nhân của P7 bị dẫn tới qua quảng cáo độc hại.
Theo GTIG, các trang đích lọc người truy cập trước khi phục vụ bất cứ thứ gì:
- Lấy dấu vân tay trình duyệt (fingerprinting) để chắc đây là Safari trên iOS thật (ví dụ có Apple Pay và WebGL2, không có các API riêng của Android hay Chrome).
- Một cờ phiên trong
sessionStorage(P7 dùnglocalStorage) để không tấn công một máy hai lần. - Người không phải mục tiêu bị chuyển hướng sang một trang bình thường, nên đa số người truy cập không thấy gì lạ.
- Một iframe ẩn kích thước bằng 0 nạp bộ tải, bộ này chọn exploit đúng với phiên bản iOS.
Với người dùng, điều này nghĩa là không có khoảnh khắc nào nhìn thấy được để mà nghi ngờ. "Đừng bấm link lạ" vẫn là lời khuyên đúng, nhưng ở đây thứ kích hoạt có thể là một trang tin bạn đọc hằng ngày, hay một ô quảng cáo trên đó.
Các payload lấy những gì
GTIG tìm thấy ba payload, mỗi cái do một khách hàng khác nhau của bộ công cụ dùng, đều viết bằng JavaScript:
| Payload | Bên sử dụng | Hành vi |
|---|---|---|
| GHOSTBLADE | UNC6353 (Ukraine) | Chạy một lần rồi tải lên: iMessage, Telegram, WhatsApp, email, danh bạ, lịch sử cuộc gọi, Keychain, mật khẩu Wi-Fi, lịch sử vị trí, metadata ảnh, Ghi chú, Sức khoẻ, file iCloud Drive, dữ liệu ví tiền mã hoá |
| GHOSTKNIFE | Chiến dịch nhắm vào Ả Rập Xê Út | Backdoor: tài khoản, tin nhắn, dữ liệu trình duyệt, vị trí, chụp màn hình, ghi âm micro, kênh điều khiển có mã hoá |
| GHOSTSABER | PARS Defense | Backdoor: liệt kê app và file, chạy truy vấn SQLite trên cơ sở dữ liệu của app, tải file lên, chạy JavaScript tuỳ ý |
Cả ba đều xoá báo cáo crash của các tiến trình mà chuỗi khai thác đã đi qua, xoá luôn một dấu vết dễ thấy.
P7: biến thể đứng sau các cảnh báo tuần này
P7 không phải lỗ hổng iOS mới. Nó là một implant đã được sửa, cài vào sau khi cùng chuỗi DarkSword khai thác thành công, và được đặt tên theo tiền tố p7_ mà tác giả thêm vào code. iVerify liệt kê những thay đổi:
- Kín tiếng hơn: bỏ log gỡ lỗi, ít lần chèn vào tiến trình khác hơn, và dùng bộ nhớ trình duyệt để không khai thác lại cùng một máy.
- Trích Keychain ngay trên máy: dựng một file JSON chứa các mục trong Keychain rồi mới tải lên, thay vì chép nguyên cơ sở dữ liệu ra ngoài.
- Ví tiền mã hoá: có lệnh tìm ví và một phần xử lý riêng cho imToken.
- Điều khiển hai chiều: implant chạy bên trong SpringBoard (tiến trình màn hình chính) và hỏi server mỗi 15 giây để nhận lệnh, ví dụ tải file về, tải ảnh lên, liệt kê app, chép cơ sở dữ liệu Ghi chú, hay chạy JavaScript tuỳ ý.
iVerify so sánh P7 với nhiều biến thể có AI hỗ trợ mà họ gặp: tác giả P7 hiểu đoạn code họ đang sửa. Họ cũng cho biết các dấu hiệu nhận diện cũ không còn bắt được nó. Đó là lý do thông báo của VietinBank nói các dấu hiệu nhiễm thường gặp không còn đáng tin.
Kiểm tra iPhone của bạn: phiên bản nào an toàn
Vào Cài đặt › Cài đặt chung › Giới thiệu và xem phiên bản iOS. Dựa trên khuyến cáo của Apple và danh sách bản cập nhật bảo mật:
| iPhone của bạn | An toàn trước DarkSword khi chạy |
|---|---|
| iPhone 11 trở lên | iOS 26.3 trở lên, hoặc iOS 27 (hiện tại: 27.0.1) |
| iPhone XS, XS Max, XR | iOS 18.7.7 trở lên (mới nhất: 18.7.10) |
| Các đời cũ hơn | iOS 15.8.7 hoặc 16.7.15 |
Máy nào đang ở iOS 18.4 đến 18.7.6 là nằm trong vùng bị ảnh hưởng. Nếu bạn dùng iPhone 11 trở lên mà vẫn ở iOS 18, Apple khuyên lên hẳn phiên bản chính hiện tại, nơi có các lớp bảo vệ mạnh nhất.
Cần làm gì, theo thứ tự
- Cập nhật trong Cài đặt › Cài đặt chung › Cập nhật phần mềm, và bật cập nhật tự động.
- Chưa cập nhật được ngay thì bật Chế độ phong toả (Lockdown Mode) trong Cài đặt › Quyền riêng tư & Bảo mật. Apple nói máy bật chế độ này được bảo vệ khỏi các cuộc tấn công này kể cả khi chạy phần mềm cũ. Nó chặn một số công nghệ web phức tạp, nên vài trang sẽ chạy khác đi.
- Giữ Duyệt web an toàn (Safe Browsing) của Safari ở trạng thái bật. Apple cho biết nó chặn các tên miền đã được xác định trong các cuộc tấn công này.
- Nếu nghi máy đã bị xâm nhập, khuyến cáo của ngân hàng khớp với các báo cáo: sao lưu dữ liệu quan trọng, khôi phục cài đặt gốc, cập nhật iOS, rồi đổi mật khẩu ngân hàng và các tài khoản quan trọng từ một thiết bị bạn tin tưởng. Chuyển tiền ra khỏi mọi ví nóng có khoá nằm trên máy đó, vì P7 nhắm đúng vào chỗ này.
Có hai giới hạn nên biết. Khởi động lại xoá được implant không ghi file, nhưng không xoá được hậu quả của những gì nó đã gửi đi. Và cập nhật bảo vệ bạn khỏi chuỗi này, không phải khỏi chuỗi tiếp theo. Không bước nào ở đây thay được các lớp bảo vệ phía ngân hàng như OTP hay hạn mức giao dịch.
Người làm website rút ra được gì
DarkSword cần một trang web làm điểm xuất phát, và nhiều trang trong số đó là website hợp pháp bị chèn một script, hoặc các ô quảng cáo. Nếu bạn vận hành một website, câu hỏi đáng đặt ra là bạn đang cho phép code nào chạy trên đó:
- Biết rõ từng script bên thứ ba. Thẻ của mạng quảng cáo hay công cụ analytics chạy với quyền ngang code của chính bạn. Một Content Security Policy liệt kê các nguồn script được phép sẽ làm một thẻ
<script>bị chèn từ tên miền lạ không chạy được. - Ghim các file tĩnh của bên thứ ba bằng Subresource Integrity, để file trên CDN bị thay đổi sẽ bị từ chối.
- Coi "website của mình bị dùng để phát tán mã độc" là một loại sự cố thật, không chỉ "dữ liệu của mình bị lấy". Theo dõi thẻ
<script>hay<iframe>lạ trong HTML trên production giúp bắt được chính bước chèn code.
Các biện pháp này giảm khả năng website của bạn trở thành bước phát tán. Chúng không giúp gì cho một người truy cập có điện thoại chưa vá và gặp exploit ở nơi khác, nên cập nhật iOS vẫn là cách sửa quan trọng nhất.
Tóm tắt
- DarkSword là chuỗi khai thác sáu lỗi cho iOS 18.4–18.7, viết bằng JavaScript, kích hoạt chỉ bằng việc mở một trang web.
- Mọi lỗi đều đã được vá: iOS 26.3 trở lên hoặc iOS 27, 18.7.7 trở lên với máy chỉ chạy được iOS 18, 15.8.7 hoặc 16.7.15 với máy cũ nhất.
- P7 là implant kín tiếng hơn cho cùng chuỗi đó, lấy dữ liệu Keychain và ví tiền mã hoá; đây là thứ các ngân hàng Việt Nam đang cảnh báo.
- Chưa cập nhật được: bật Chế độ phong toả. Nghi bị nhiễm: sao lưu, khôi phục, cập nhật, đổi mật khẩu trên máy khác.
- Người làm website: kiểm soát script bên thứ ba bằng CSP và SRI để trang của bạn không trở thành nơi phát tán.
Nếu bạn từng xử lý hậu quả của một bộ khai thác trên một đội điện thoại hay một website bị xâm nhập, mình rất muốn được trao đổi. Email của mình ở trang chủ.