# Một cú restore… và toàn bộ hệ thống của bạn thuộc về hacker - câu chuyện từ CVE-2025-12762

## **Giới thiệu về** **CVE-2025-12762**

Để có thể hiểu rõ hơn về lỗ hổng này, chúng ta sẽ đi qua một số khái niệm cơ bản. **PgAdmin** được biết đến là công cụ quản trị và phát triển **PostgreSQL** phổ biến nhất hiện nay, được sử dụng rộng rãi bởi quản trị viên hệ thống (DBA), nhà phát triển và các tổ chức vận hành hạ tầng dữ liệu. Đây là phần mềm **mã nguồn mở**, cung cấp giao diện đồ họa (GUI) giúp quản lý cơ sở dữ liệu PostgreSQL một cách trực quan, dễ sử dụng và hiệu quả.

![CVE-2023-5002 pgAdmin RCE, LDAP Injection](https://securityonline.info/wp-content/uploads/2023/09/pgadmin4-welcome-light.png align="center")

**PgAdmin** hỗ trợ đầy đủ các chức năng quản trị cơ bản đến nâng cao, bao gồm:

* Quản lý kết nối đến nhiều máy chủ PostgreSQL
    
* Tạo, chỉnh sửa và xóa bảng, schema, view, function
    
* Chạy truy vấn SQL với Query Tool
    
* Theo dõi và quản lý session, process, khóa (locks)
    
* Sao lưu và khôi phục dữ liệu (backup/restore)
    
* Giám sát hoạt động và hiệu năng của cơ sở dữ liệu
    
* Tích hợp các công cụ cho developer và DBA
    

**CVE-2025-12762** đã được các chuyên gia An ninh mạng công bố vào ngày 13 tháng 11 năm 2025. Theo báo cáo đây là một lỗ hổng **Remote Code Execution (RCE)** được phát hiện trong pgAdmin 4. Điều này có thể cho phép kẻ tấn công tương tác trực tiếp với cơ sở dữ liệu database để thực hiện việc đánh cắp thông tin và tạo tài khoản quản trị viên mới.

## **Phạm vi ảnh hưởng**

Các phiên bản bị ảnh hưởng: pgAdmin 4 **≤ 9.9** khi chạy ở chế độ “server mode” (máy chủ) và sử dụng chức năng khôi phục (restore) từ file dump định dạng PLAIN.

## **Đánh giá mức độ nghiêm trọng**

CVE-2022-45822 được đánh giá mức độ nghiêm trọng là : **CRITICAL** với số điểm như sau:

* **NIST**: NVD **Base Score**: 9.8 - CRITICAL **Vector**: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    
* **CNA**: Patchstack **Base Score**: 9.1 - CRITICAL **Vector**: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
    

## **Phân tích và khai thác lỗ hổng**

Như đã đề cập bên trên thì đây là một **lỗ hổng RCE (remote code execution)** ảnh hưởng tới **pgAdmin 4 chạy ở chế độ server** khi thực hiện restore từ các file dump ở **PLAIN** format. Nếu file dump chứa lệnh đặc biệt, pgAdmin có thể vô tình cho chạy lệnh đó trên máy host.

Kẻ tấn công đầu tiên sẽ đăng nhập vào giao diện pgAdmin Web. Từ đó, chúng có thể:

* Truy cập file manager của pgAdmin
    
* Upload file vào thư mục tạm của pgAdmin
    
* Gọi các job như *restore*, *backup*, *import/export*
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1763655155912/2a3feab8-65ac-4530-b407-81cea73f5d30.png align="center")

Bạn có thắc mắc là kẻ tấn công lấy đâu ra mật khẩu để đăng nhập không? Thông thường chúng sẽ có ba cách chính để thực hiện:

* **Cách 1:** Để mật khẩu quản trị yếu, đương nhiên với cách này chúng chỉ 10–50 lần thử là có thể tìm trúng nếu mật khẩu “dễ đoán”.
    
* **Cách 2**: Lộ mật khẩu trong các file cấu hình như: `config_distro.py`, `config_local.py` hay `servers.json`. Và nếu server bị truy cập hoặc repo cấu hình bị leak, kẻ tấn công lấy được thông tin đăng nhập.
    
* **Cách 3**: Phishing nội bộ giả mạo thông tin đăng nhập. Đối với trường hợp này thì cũng rất phổ biến hiện nay khi mà kẻ tấn công lợi dụng AI tạo các trang Web giả mạo và Email trông hợp lệ nhằm đánh lừa nạn nhân cung cấp thông tin đăng nhập.
    

Sau khi đã đăng nhập, kẻ tấn công sẽ tải file dump PLAIN có nội dung độc hại. Điểm cốt lõi của vấn đề là trong **PLAIN format**, PostgreSQL dump cho phép sử dụng các meta-command `“\!“` và nó là tính năng hợp pháp của `psql`, dùng để chạy lệnh trên hệ điều hành. Khi đấy kẻ tấn công chỉ cần chuẩn bị các file dump với câu lệnh SQL trông hợp pháp và Upload.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1763656443875/c8d92a78-5129-4d33-a801-599240d1aa40.png align="center")

Sau khi tải lên file, kẻ tấn công chỉ cần yêu cầu pgAdmin thực hiện Restore file dump vừa upload. Từ đó có thể truy cập vào bất kỳ database nào (thường là `postgres`). Như đã biết thì **pgAdmin** không lọc, không vô hiệu hóa, không sandbox các meta-command (`\!`, `\set`, …) trong file dump PLAIN.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1763656558778/4b43d3b1-1e9e-4b19-8d21-15b5cd68da36.png align="center")

Một khi restore bắt đầu, tiến trình restore của pgAdmin:

* Đọc file dump
    
* Thấy lệnh hệ thống `\! something`
    
* Trực tiếp chuyển lệnh đến shell của host đang chạy pgAdmin
    

Đến được bước này thì kẻ tấn công sẽ dễ dàng RCE trên hệ thống và **viết file, mở reverse shell, cài backdoor, sửa cấu hình, hoặc pivot mạng. Cuối cùng sẽ thực hiện:**

* Kiểm tra đã thực thi thành công hay chưa (dựa vào file marker hoặc log)
    
* Phát tán malware, crypto-miner hoặc backdoor
    
* Tiến hành hoạt động lateral movement trong mạng nội bộ
    

## **Khuyến nghị**

1. **Cập nhật pgAdmin 4 lên phiên bản đã vá**
    
    * Nâng cấp lên **pgAdmin 4 ≥ 9.10** — phiên bản này đã khắc phục lỗ hổng.
        
    * Kiểm tra phiên bản hiện tại:
        
        ```plaintext
        pip show pgadmin4
        ```
        
    * Nếu triển khai bằng Docker:
        
        ```plaintext
        docker pull dpage/pgadmin4:latest
        ```
        
2. **Tạm thời vô hiệu hóa tính năng Restore dạng PLAIN**
    
    * Vì lỗ hổng xuất phát từ việc xử lý **plain-format dump file**, hãy:
        
        * Chỉ cho phép restore từ định dạng **Custom** hoặc **Directory**.
            
        * Cấm hoặc hạn chế người dùng tải lên file dump `.sql` PLAIN cho đến khi cập nhật hoàn tất.
            
        * Với deployment có reverse proxy (Nginx, Apache), có thể chặn upload `.sql`.
            
3. **Giới hạn truy cập vào pgAdmin (server mode)**
    
    * pgAdmin tuyệt đối không nên mở ra Internet.
        
        * Chỉ cho phép truy cập:
            
            * Từ LAN nội bộ
                
            * Từ VPN
                
            * Từ firewall whitelist
                
        * Trên Linux:
            
            ```plaintext
            ufw allow from 10.0.0.0/24 to any port 5050
            ufw deny 5050
            ```
            

## **Tổng kết**

Lỗ hổng **CVE-2025-12762** trong pgAdmin 4 cho thấy một thực tế đáng lo ngại: chỉ một chức năng tưởng chừng vô hại như **khôi phục cơ sở dữ liệu từ file dump** lại có thể trở thành điểm tấn công dẫn đến **Remote Code Execution** và chiếm quyền toàn bộ máy chủ. Với mức độ nghiêm trọng **CVSS 9.1**, lỗ hổng này đặc biệt nguy hiểm đối với các hệ thống vận hành trong **server mode**, nơi nhiều người dùng có thể tương tác và upload file.

Bản chất của vấn đề nằm ở việc pgAdmin xử lý file dump dạng PLAIN mà không kiểm soát đầy đủ dữ liệu đầu vào, cho phép attacker chèn lệnh độc hại và thực thi chúng ở cấp hệ điều hành. Điều này khiến phạm vi ảnh hưởng vượt xa ứng dụng pgAdmin, trực tiếp đe dọa **máy chủ**, **cơ sở dữ liệu**, và thậm chí **các hệ thống liên quan** trong cùng hạ tầng.

Vì vậy, việc **cập nhật ngay lập tức**, **kiểm tra toàn diện**, và **tăng cường kiểm soát file dump** là bước bắt buộc để bảo vệ hệ thống. Sự cố này cũng là lời nhắc nhở quan trọng rằng trong an ninh hệ thống, những thành phần hỗ trợ như công cụ quản trị - có thể trở thành điểm yếu chết người nếu không được giám sát và cập nhật đúng cách.

## **Tham khảo**

1. [Critical pgAdmin Flaws (CVE-2025-12762, CVSS 9.1) Allow Remote Code Execution via PostgreSQL Dump Files](https://securityonline.info/critical-pgadmin-flaws-cve-2025-12762-cvss-9-1-allow-remote-code-execution-via-postgresql-dump-files/)
    
2. [Blackash-CVE-2025-12762/CVE-2025-12762.py at main · B1ack4sh/Blackash-CVE-2025-12762 · GitHub](https://github.com/B1ack4sh/Blackash-CVE-2025-12762/blob/main/CVE-2025-12762.py)
    
3. [NVD - CVE-2025-12762](https://nvd.nist.gov/vuln/detail/CVE-2025-12762)
