fix(api): use constant time comparison for tokens

This commit is contained in:
alyssa 2025-08-08 20:36:51 +00:00 committed by Iris System
parent 0f0577c758
commit 18bdd78b67
3 changed files with 8 additions and 3 deletions

1
Cargo.lock generated
View file

@ -95,6 +95,7 @@ dependencies = [
"serde_json",
"serde_urlencoded",
"sqlx",
"subtle",
"tokio",
"tower 0.4.13",
"tower-http",

View file

@ -26,3 +26,4 @@ reverse-proxy-service = { version = "0.2.1", features = ["axum"] }
serde_urlencoded = "0.7.1"
tower = "0.4.13"
tower-http = { version = "0.5.2", features = ["catch-panic"] }
subtle = "2.6.1"

View file

@ -5,6 +5,8 @@ use axum::{
response::Response,
};
use subtle::ConstantTimeEq;
use tracing::error;
use crate::auth::AuthState;
@ -48,9 +50,10 @@ pub async fn auth(State(ctx): State<ApiContext>, mut req: Request, next: Next) -
.expect("missing api config")
.temp_token2
.as_ref()
// this is NOT how you validate tokens
// but this is low abuse risk so we're keeping it for now
&& app_auth_header == config_token2
&& app_auth_header
.as_bytes()
.ct_eq(config_token2.as_bytes())
.into()
{
authed_app_id = Some(1);
}