Skip to content

GHSA-gq2m-77hf-vwgh CVE-2026-30224 GO-2026-4623

OliveTin Session Fixation: Logout Fails to Invalidate Server-Side Session

Medium Go
Severity
5.4 / 10
Medium · CVSS 3.1
Exploit chance (EPSS)
0.31%
Chance of exploitation in the next 30 days. Higher than 24.39% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-384 Session Fixation
CWE-613 Insufficient Session Expiration
Fix
0.0.0-20260304233115-d6a0abc3755d15
Upgrade github.com/OliveTin/OliveTin to this version or later

Description

Summary

OliveTin does not revoke server-side sessions when a user logs out. Although the browser cookie is cleared, the corresponding session remains valid in server storage until expiry (default ≈ 1 year).

An attacker with a previously stolen or captured session cookie can continue authenticating after logout, resulting in a post-logout authentication bypass.

This is a session management flaw that violates expected logout semantics.

Details

During logout:

// Logout only clears browser cookie
response.Header().Set("Set-Cookie", localCookie.String())

However, the server still accepts the session:

session := sessionStorage.Providers[provider].Sessions[sid]
...
return session

The SID is not deleted from sessionStorage.

Why vulnerable: Logout does not remove the SID from sessionStorage; old cookie is still accepted until expiry (~1 year).

File: api.go, sessions.go, local.go Lines: api.go:392-427; sessions.go:39-59, 61-80; local.go:32-47 Behavior

  • Login → receive SID cookie
  • Logout → cookie cleared client-side
  • Replay old SID manually → still authenticated

Expected:

  • Logout invalidates session immediately

Actual:

  • Old SID remains usable until expiry

PoC

Minimal config

listenAddressSingleHTTPFrontend: 0.0.0.0:16642
authRequireGuestsToLogin: true

authLocalUsers:
  enabled: true
  users:
    - username: low
      usergroup: users
      password: "$argon2id$..."

actions:
  - title: Dummy
    id: dummy
    shell: "echo dummy"

Reproduction

Login and capture SID:

LOGIN=$(curl -i -X POST http://localhost:16642/api/LocalUserLogin \
  -H 'Content-Type: application/json' \
  -d '{"username":"low","password":"lowpass"}')

SID=$(printf '%s\n' "$LOGIN" | awk -F'[=;]' '/olivetin-sid-local/{print $2}')

Works before logout:

curl -X POST http://localhost:16642/api/WhoAmI \
  -H "Cookie: olivetin-sid-local=$SID"

Logout:

curl -X POST http://localhost:16642/api/Logout \
  -H "Cookie: olivetin-sid-local=$SID"

Replay old cookie:

curl -X POST http://localhost:16642/api/WhoAmI \
  -H "Cookie: olivetin-sid-local=$SID"

Result

User is still authenticated after logout.

Impact

Type:

Session Management Flaw

  • Logout Bypass
  • Session Replay

Risk:

  • Stolen cookies remain valid
  • Persistent unauthorized access
  • Users falsely believe logout ended the session

Attack scenarios:

  • Shared computers
  • XSS/session theft
  • Proxy logs
  • Malware/browser compromise

Affected versions

Go

PackageVulnerableFixed in
github.com/OliveTin/OliveTin
< 0.0.0-20260304233115-d6a0abc3755d15
0.0.0-20260304233115-d6a0abc3755d15
github.com/OliveTin/OliveTin
all versions
No fix yet

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

github.com/OliveTin/OliveTin Go → 0.0.0-20260304233115-d6a0abc3755d15

go
go get github.com/OliveTin/OliveTin@v0.0.0-20260304233115-d6a0abc3755d15 && go mod tidy

Severity breakdown

CVSS 3.1 5.4

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

Attack vector
Network
Attack complexity
Low
Privileges required
Low
User interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Weakness

CWE-384: Session Fixation

Authenticating a user, or otherwise establishing a new user session, without invalidating any existing session identifier gives an attacker the opportunity to steal authenticated sessions.

How to prevent it
  • Architecture and Design: Invalidate any existing session identifiers prior to authorizing a new user session.
  • Architecture and Design: For platforms such as ASP that do not generate new values for sessionid cookies, utilize a secondary cookie. In this approach, set a secondary cookie on the user's browser to a random value and set a session variable to the same value. If the session variable and the cookie value ever don't match, invalidate the session, and force the user to log on again.
  • Operation: Use an application firewall that can detect attacks against this weakness. It can be beneficial in cases in which the code cannot be fixed (because it is controlled by a third party), as an emergency prevention measure while more comprehensive software assurance measures are applied, or to provide defense in depth [REF-1481].

CWE-613: Insufficient Session Expiration

According to WASC, "Insufficient Session Expiration is when a web site permits an attacker to reuse old session credentials or session IDs for authorization."

How to prevent it
  • Implementation: Set sessions/credentials expiration date.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-jm28-2wcr-qf3h
OliveTin: StartActionAndWait Endpoints Bypass `logs` Permission and Return Action Output
Medium Also affects github.com/OliveTin/OliveTin
GHSA-xc5w-4v5w-7x65
OliveTin OS Command Injection via Custom regex: Argument Type Bypassing Shell Safety Check
Medium Also affects github.com/OliveTin/OliveTin
GHSA-xpxj-f2fm-rqch
OliveTin: Unauthenticated DoS via OAuth2 State Memory Exhaustion (Unbounded Map Growth)
High Also affects github.com/OliveTin/OliveTin
GHSA-prj9-97mp-mwh2
OliveTin has Unvalidated `ot_`-prefixed Arguments that Bypass Input Filtering
Medium Also affects github.com/OliveTin/OliveTin
GHSA-f637-w7p2-m7fx
OliveTin: ValidateArgumentType API Endpoint's Missing Authentication Allows Action and Argument Enumeration
Low Also affects github.com/OliveTin/OliveTin
GHSA-7fq5-7wr8-rjwj
OliveTin has a Concurrent Template Parsing Race Condition which Leads to Cross-Request Command Contamination
High Also affects github.com/OliveTin/OliveTin
GHSA-xx6g-43w2-9g6g
OliveTin's email argument makes compliance harder, enables log injection
Medium Also affects github.com/OliveTin/OliveTin
GHSA-228v-wc5r-j8m7
OliveTin Vulnerable to Unauthorized Action Output Disclosure via EventStream
Medium Also affects github.com/OliveTin/OliveTin
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor