centos7下sudo漏洞自動化批量修復

Linux安全工具sudo被發現應嚴重的基於堆緩衝區溢出,任何本地用戶都可以利用該溢出。它的發現者將其命名爲"Baron Samedit"。即使未在sudoers文件中列出用戶,也可以利用該錯誤進行提權獲得root用戶用戶。利用該漏洞不需要用戶認證,此漏洞已分配爲CVE-2021-3156,危險等級評分爲7分。

centos7下sudo漏洞自動化批量修復

在sudo中發現一個缺陷。在sudo解析命令行參數的方式中發現了基於堆的緩衝區溢出。任何本地用戶(普通用戶和系統用戶,sudoers和非sudoers)都可以利用此漏洞,而無需進行身份驗證(即,***者不需要知道用戶的密碼),利用此漏洞可以用於普通用戶無差別提權,漏洞對數據機密性和完整性以及系統可用性帶來嚴重威脅。

漏洞細節

當sudo通過-s或-i命令行選項在shell模式下運行命令時,它將在命令參數中使用反斜槓轉義特殊字符。如果命令在外殼模式下運行,那麼sudoers策略插件將在評估sudoers策略(不希望使用轉義字符)之前從參數中刪除轉義字符。

如果代碼中的錯誤以未轉義的反斜槓字符結尾,那麼它將刪除轉義字符的錯誤會超出字符串的最後一個字符。在正常情況下,該錯誤將是無害的,因爲sudo對命令參數中的所有反斜槓進行了轉義。但是,由於在命令行解析代碼中存在一個邏輯錯誤,導致可以使用-s或-i選項運行sudoedit,並設置一個指示啓用Shell模式的標誌。因爲實際上沒有運行命令,所以sudo不會轉義特殊字符。最後,決定是否刪除轉義符的代碼並沒有檢查命令是否正在實際運行,僅檢查了設置了shell標誌。

sudo報嚴重緩衝區溢出漏洞,可致無差別提權

有關更多信息,請參閱Qualys通報(blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit)。

sudo報嚴重緩衝區溢出漏洞,可致無差別提權

漏洞驗證

用普通用戶登陸,在shell界面執行

sudoedit -s /

如果輸出爲:

usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-D directory] [-g group]
                [-h host] [-p prompt] [-R directory] [-T timeout] [-u user]
                file ...

則系統不受影響或者已經修復了漏洞。

如果輸出爲:

sudoedit: /: not a regular file

則表示系統存在該漏洞。

受影響版本

Sudo 1.8.2到1.8.31p2和1.9.0到1.9.5p1均會受到影響。

根據紅帽子官方調查:

紅帽子企業版 6,7,8版本(對應centos 6,7 ,8),OpenShift容器平臺 4.4.,4.5,4.6 版本均受影響

解決方法

安裝Sudo 1.9.5p2版本或修補的供應商支持的版本。

下載官方的sudo rpm包

wget https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el7.x86_64.rpm
wget https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-logsrvd-1.9.5-3.el7.x86_64.rpm
wget https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-python-1.9.5-3.el7.x86_64.rpm

如果只是一臺升級

rpm -Uvh sudo-.*.rpm

或者

yum -y update ./sudo-*.rpm

批量升級

打包爲zip
mkdir -p /data/ansible/sudo/{files,handlers,vars,tasks}
zip sudo195.zip ./sudo-.*.rpm
mv sudo195.zip /data/ansible/sudo/files/
cat > /data/ansible/sudo/tasks/main.yaml << EOF
---
    - name: Copy sudo rpm to host.
      unarchive:
        src: sudo195.zip
        dest: /tmp

    - name: update sudo
      shell: |
        yum -y update /tmp/sudo-*.rpm
EOF
# tree /data/ansible/sudo/
/data/ansible/sudo/
├── files
│   └── sudo195.zip
├── handlers
├── tasks
│   └── main.yaml
└── vars

編寫mail.yaml,playbook執行入口

cat > /data/ansible/main.yaml << EOF
- hosts:
  - all

  gather_facts: no
  become: yes
  roles:
    - sudo

執行playbook

ansible-playbook /data/ansible/main.yaml

image-20210129113449009

查看升級結果

ansible all -m shell -a "sudo --version | grep version"
或者
ansible all -m shell -a "rpm -qa sudo"

centos7下sudo漏洞自動化批量修復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章