1. 程式人生 > 其它 >Nexus 升級失敗後恢復資料

Nexus 升級失敗後恢復資料

      背景:Nexus 被安全部門掃到漏洞 CVE-2020-10199,需要升級解決。由於網上資料較少,升級過程中出現數據紊亂的問題,後來經過努力,終於解決了。

 

一、漏洞概要

  2020年03月31 日,Sonatype 官方釋出安全公告,宣告修復了存在於 Nexus Repository Manager 3 中的遠端程式碼執行漏洞 CVE-2020-10199。

  Sonatype Nexus 是一個 Maven 的倉庫管理系統,它提供了強大的倉庫管理、構件搜尋等功能,並且可以用來搭建 Maven 倉庫私服,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間。

  在 Nexus Repository Manager OSS/Pro 3.21.1 及之前的版本中,由於某處功能安全處理不當,導致經過授權認證的攻擊者,可以在遠端通過構造惡意的 HTTP 請求,在服務端執行任意惡意程式碼,獲取系統許可權。 

  此漏洞的利用需要攻擊者具備任意型別的賬號許可權。

 

二、漏洞影響

【危險等級】

  高危

【影響版本】  

  Sonatype Nexus Repository Manager OSS/Pro 3.x <= 3.21.1

 

三、漏洞修復

   注:修復漏洞前請將資料備份,並進行充分測試。筆者認為,Nexus 的資料儲存和常規的應用不太一樣,sonatype-work/nexus3/ 目錄裡面的 db、keystone 和 blobs 子目錄非常重要,可以定期備份。

 

      目前,官方已釋出新版本修復了該漏洞,請受影響的使用者升級到安全版本。

 

   下載地址:https://help.sonatype.com/repomanager3/download/ 

      官方升級指引:https://help.sonatype.com/repomanager3/installation-and-upgrades/upgrading-a-standalone-instance

 

四、升級失敗後恢復資料

      筆者在升級過程中,由於失誤沒有備份 sonatype-work 目錄就進行升級,直接解壓下載的安裝包,覆蓋了 sonatype-work ,導致原有的 nexus 資料庫元資料紊亂,nexus 系統整個掛了。後面經過幾天的努力,也沒能恢復 nexus,虛擬機器也沒有購買備份服務,服務也沒有配置備份,人都差點整抑鬱了。


      以後操作一定小心小心再小心,不要犯經驗注意錯誤。

 

      後來經過思考,發現 maven 本地倉庫 repository 裡面有大部分編譯所需要的 jar,只要將倉庫 repository 裡面的上傳到 nexus 系統,從一定程度上恢復 nexus 的資料。

 

      方法如下:

      1、切到倉庫 repository 裡面

      2、準備上傳指令碼 trans_jar.sh,賦予執行許可權

#!/bin/bash

# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do case $opt in r) REPO_URL="$OPTARG" ;; u) USERNAME="$OPTARG" ;; p) PASSWORD="$OPTARG" ;; esac done find . -type f -not -path './trans_jar\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;

  

      3、在倉庫 repository 裡面執行指令碼

nohup bash trans_jar.sh -u admin -p 'PASSWORD' -r http://10.10.10.100:8081/repository/local-hosted-release

      注意:http://10.10.10.100:8081/repository/local-hosted-release  jar倉庫要提前建好

 

      4、登入 nexus 檢視