You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tooling.apache.org by "asf-tooling (via GitHub)" <gi...@apache.org> on 2026/03/31 00:25:55 UTC

[I] Global Session Validation Hook Checks Age But Not Account Status (tooling-trusted-releases)

asf-tooling opened a new issue, #952:
URL: https://github.com/apache/tooling-trusted-releases/issues/952

   **ASVS Level(s):** [L1]
   
   **Description:**
   
   ### Summary
   The `validate_session_lifetime()` function runs as a `@app.before_request` hook on every HTTP request but only validates session age (created_at timestamp), not LDAP account status. The `ldap.is_active()` control exists and is used in `authenticate()` for specific routes, but is not called in this global hook. This creates inconsistent protection where some routes check account status via `authenticate()` while others rely solely on the global hook which only validates session age, leading to false security confidence.
   
   ### Details
   **Affected Files and Lines:**
   - `atr/server.py:308-331` - validate_session_lifetime() without account status check
   
   The infrastructure for global validation exists but the critical account status check is missing. This means disabled accounts can continue to access routes that don't explicitly call `authenticate()`, creating an authorization bypass.
   
   ### Recommended Remediation
   Add periodic account status revalidation to `validate_session_lifetime()` hook with caching to balance security vs LDAP load:
   
   ```python
   # atr/server.py - in validate_session_lifetime() hook
   ACCOUNT_CHECK_INTERVAL = 300  # 5 minutes
   
   if session_data:
       account_checked_at = session_data.get('account_checked_at', 0)
       current_time = time.time()
       
       if current_time - account_checked_at > ACCOUNT_CHECK_INTERVAL:
           if not ldap.is_active(session_data['uid']):
               log.info('session_invalidated_account_disabled', extra={'asf_uid': session_data['uid']})
               asfquart.session.clear()
               return quart.redirect('/auth?reason=account_disabled')
           session_data['account_checked_at'] = current_time
           asfquart.session.write(session_data)
   ```
   
   ### Acceptance Criteria
   - [ ] Account status check added to global hook
   - [ ] Caching mechanism prevents LDAP overload
   - [ ] Session cleared when account disabled
   - [ ] User redirected with appropriate message
   - [ ] Last check timestamp stored in session
   - [ ] Unit test verifying the fix
   
   ### References
   - Source reports: L1:7.4.2.md
   - Related findings: FINDING-006, FINDING-129
   - ASVS sections: 7.4.2
   
   ### Priority
   Critical
   
   ---
   
   ---
   
   **Related issue:** https://github.com/apache/tooling-trusted-releases/issues/731
   
   ---
   
   **Triage notes:** attach to session store - validate_session_lifetime won't be needed when we use update to asfquart https://github.com/apache/tooling-trusted-releases/issues/731


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org
For additional commands, e-mail: dev-help@tooling.apache.org


Re: [I] Global Session Validation Hook Checks Age But Not Account Status (tooling-trusted-releases)

Posted by "alitheg (via GitHub)" <gi...@apache.org>.
alitheg closed issue #952: Global Session Validation Hook Checks Age But Not Account Status
URL: https://github.com/apache/tooling-trusted-releases/issues/952


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tooling.apache.org
For additional commands, e-mail: dev-help@tooling.apache.org