Compare commits
	
		
			6 Commits
		
	
	
		
			version/20
			...
			version/20
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b34665fabd | |||
| 0e07414e97 | |||
| dcbf5f323c | |||
| c3f1d6587d | |||
| 7254c11cb9 | |||
| ca4e6a10f5 | 
| @ -1,5 +1,5 @@ | ||||
| [bumpversion] | ||||
| current_version = 2025.4.2 | ||||
| current_version = 2025.4.3 | ||||
| tag = True | ||||
| commit = True | ||||
| parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:-(?P<rc_t>[a-zA-Z-]+)(?P<rc_n>[1-9]\\d*))? | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  | ||||
| from os import environ | ||||
|  | ||||
| __version__ = "2025.4.2" | ||||
| __version__ = "2025.4.3" | ||||
| ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -66,7 +66,10 @@ class RACClientConsumer(AsyncWebsocketConsumer): | ||||
|     def init_outpost_connection(self): | ||||
|         """Initialize guac connection settings""" | ||||
|         self.token = ( | ||||
|             ConnectionToken.filter_not_expired(token=self.scope["url_route"]["kwargs"]["token"]) | ||||
|             ConnectionToken.filter_not_expired( | ||||
|                 token=self.scope["url_route"]["kwargs"]["token"], | ||||
|                 session__session__session_key=self.scope["session"].session_key, | ||||
|             ) | ||||
|             .select_related("endpoint", "provider", "session", "session__user") | ||||
|             .first() | ||||
|         ) | ||||
|  | ||||
| @ -87,3 +87,22 @@ class TestRACViews(APITestCase): | ||||
|         ) | ||||
|         body = loads(flow_response.content) | ||||
|         self.assertEqual(body["component"], "ak-stage-access-denied") | ||||
|  | ||||
|     def test_different_session(self): | ||||
|         """Test request""" | ||||
|         self.client.force_login(self.user) | ||||
|         response = self.client.get( | ||||
|             reverse( | ||||
|                 "authentik_providers_rac:start", | ||||
|                 kwargs={"app": self.app.slug, "endpoint": str(self.endpoint.pk)}, | ||||
|             ) | ||||
|         ) | ||||
|         self.assertEqual(response.status_code, 302) | ||||
|         flow_response = self.client.get( | ||||
|             reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}) | ||||
|         ) | ||||
|         body = loads(flow_response.content) | ||||
|         next_url = body["to"] | ||||
|         self.client.logout() | ||||
|         final_response = self.client.get(next_url) | ||||
|         self.assertEqual(final_response.url, reverse("authentik_core:if-user")) | ||||
|  | ||||
| @ -65,7 +65,10 @@ class RACInterface(InterfaceView): | ||||
|  | ||||
|     def dispatch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: | ||||
|         # Early sanity check to ensure token still exists | ||||
|         token = ConnectionToken.filter_not_expired(token=self.kwargs["token"]).first() | ||||
|         token = ConnectionToken.filter_not_expired( | ||||
|             token=self.kwargs["token"], | ||||
|             session__session__session_key=request.session.session_key, | ||||
|         ).first() | ||||
|         if not token: | ||||
|             return redirect("authentik_core:if-user") | ||||
|         self.token = token | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|     "$schema": "http://json-schema.org/draft-07/schema", | ||||
|     "$id": "https://goauthentik.io/blueprints/schema.json", | ||||
|     "type": "object", | ||||
|     "title": "authentik 2025.4.2 Blueprint schema", | ||||
|     "title": "authentik 2025.4.3 Blueprint schema", | ||||
|     "required": [ | ||||
|         "version", | ||||
|         "entries" | ||||
|  | ||||
| @ -31,7 +31,7 @@ services: | ||||
|     volumes: | ||||
|       - redis:/data | ||||
|   server: | ||||
|     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.4.2} | ||||
|     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.4.3} | ||||
|     restart: unless-stopped | ||||
|     command: server | ||||
|     environment: | ||||
| @ -55,7 +55,7 @@ services: | ||||
|       redis: | ||||
|         condition: service_healthy | ||||
|   worker: | ||||
|     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.4.2} | ||||
|     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.4.3} | ||||
|     restart: unless-stopped | ||||
|     command: worker | ||||
|     environment: | ||||
|  | ||||
| @ -29,4 +29,4 @@ func UserAgent() string { | ||||
| 	return fmt.Sprintf("authentik@%s", FullVersion()) | ||||
| } | ||||
|  | ||||
| const VERSION = "2025.4.2" | ||||
| const VERSION = "2025.4.3" | ||||
|  | ||||
| @ -26,7 +26,7 @@ Parameters: | ||||
|     Description: authentik Docker image | ||||
|   AuthentikVersion: | ||||
|     Type: String | ||||
|     Default: 2025.4.2 | ||||
|     Default: 2025.4.3 | ||||
|     Description: authentik Docker image tag | ||||
|   AuthentikServerCPU: | ||||
|     Type: Number | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| { | ||||
|     "name": "@goauthentik/authentik", | ||||
|     "version": "2025.4.2", | ||||
|     "version": "2025.4.3", | ||||
|     "private": true | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| [project] | ||||
| name = "authentik" | ||||
| version = "2025.4.2" | ||||
| version = "2025.4.3" | ||||
| description = "" | ||||
| authors = [{ name = "authentik Team", email = "hello@goauthentik.io" }] | ||||
| requires-python = "==3.12.*" | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| openapi: 3.0.3 | ||||
| info: | ||||
|   title: authentik | ||||
|   version: 2025.4.2 | ||||
|   version: 2025.4.3 | ||||
|   description: Making authentication simple. | ||||
|   contact: | ||||
|     email: hello@goauthentik.io | ||||
|  | ||||
							
								
								
									
										2
									
								
								uv.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								uv.lock
									
									
									
										generated
									
									
									
								
							| @ -165,7 +165,7 @@ wheels = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "authentik" | ||||
| version = "2025.4.2" | ||||
| version = "2025.4.3" | ||||
| source = { editable = "." } | ||||
| dependencies = [ | ||||
|     { name = "argon2-cffi" }, | ||||
|  | ||||
| @ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success"; | ||||
| export const ERROR_CLASS = "pf-m-danger"; | ||||
| export const PROGRESS_CLASS = "pf-m-in-progress"; | ||||
| export const CURRENT_CLASS = "pf-m-current"; | ||||
| export const VERSION = "2025.4.2"; | ||||
| export const VERSION = "2025.4.3"; | ||||
| export const TITLE_DEFAULT = "authentik"; | ||||
| export const ROUTE_SEPARATOR = ";"; | ||||
|  | ||||
|  | ||||
| @ -70,9 +70,6 @@ To check if your config has been applied correctly, you can run the following co | ||||
| - `AUTHENTIK_POSTGRESQL__USER`: Database user | ||||
| - `AUTHENTIK_POSTGRESQL__PORT`: Database port, defaults to 5432 | ||||
| - `AUTHENTIK_POSTGRESQL__PASSWORD`: Database password, defaults to the environment variable `POSTGRES_PASSWORD` | ||||
|   {/* TODO: Temporarily deactivated feature, see https://github.com/goauthentik/authentik/issues/14320 */} | ||||
|   {/* - `AUTHENTIK_POSTGRESQL__USE_POOL`: Use a [connection pool](https://docs.djangoproject.com/en/stable/ref/databases/#connection-pool) for PostgreSQL connections. Defaults to `false`. :ak-version[2025.4] */} | ||||
| - `AUTHENTIK_POSTGRESQL__POOL_OPTIONS`: Extra configuration to pass to the [ConnectionPool object](https://www.psycopg.org/psycopg3/docs/api/pool.html#psycopg_pool.ConnectionPool) when it is created. Must be a base64-encoded JSON dictionary. Ignored when `USE_POOL` is set to `false`. :ak-version[2025.4] | ||||
| - `AUTHENTIK_POSTGRESQL__USE_PGBOUNCER`: Adjust configuration to support connection to PgBouncer. Deprecated, see below | ||||
| - `AUTHENTIK_POSTGRESQL__USE_PGPOOL`: Adjust configuration to support connection to Pgpool. Deprecated, see below | ||||
| - `AUTHENTIK_POSTGRESQL__SSLMODE`: Strictness of ssl verification. Defaults to `"verify-ca"` | ||||
| @ -85,7 +82,7 @@ To check if your config has been applied correctly, you can run the following co | ||||
|  | ||||
| The PostgreSQL settings `HOST`, `PORT`, `USER`, and `PASSWORD` support hot-reloading. Adding and removing read replicas doesn't support hot-reloading. | ||||
|  | ||||
| - `AUTHENTIK_POSTGRESQL__DEFAULT_SCHEMA`:ak-version[2024.12] | ||||
| - `AUTHENTIK_POSTGRESQL__DEFAULT_SCHEMA` :ak-version[2024.12] | ||||
|  | ||||
|     The name of the schema used by default in the database. Defaults to `public`. | ||||
|  | ||||
|  | ||||
							
								
								
									
										27
									
								
								website/docs/security/cves/CVE-2025-52553.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								website/docs/security/cves/CVE-2025-52553.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| # CVE-2025-52553 | ||||
|  | ||||
| _Reported by [SPIEGEL-Verlag](https://gruppe.spiegel.de)_ | ||||
|  | ||||
| ## Insufficient Session verification for Remote Access Control endpoint access | ||||
|  | ||||
| ### Summary | ||||
|  | ||||
| After authorizing access to a RAC endpoint, authentik creates a token which is used for a single connection and is sent to the client in the URL. This token is intended to only be valid for the session of the user who authorized the connection, however this check is currently missing. | ||||
|  | ||||
| ### Patches | ||||
|  | ||||
| authentik 2025.4.3 and 2025.6.3 fix this issue. | ||||
|  | ||||
| ### Impact | ||||
|  | ||||
| When for example using RAC during a screenshare, a malicious user could access the same session by copying the URL from the shown browser. | ||||
|  | ||||
| ### Workarounds | ||||
|  | ||||
| As a workaround it is recommended to decrease the duration a token is valid for (in the RAC Provider settings, set **Connection expiry** to `minutes=5` for example). We also recommend enabling the option **Delete authorization on disconnect**. | ||||
|  | ||||
| ### For more information | ||||
|  | ||||
| If you have any questions or comments about this advisory: | ||||
|  | ||||
| - Email us at [security@goauthentik.io](mailto:security@goauthentik.io). | ||||
| @ -2,18 +2,22 @@ | ||||
| title: Events | ||||
| --- | ||||
|  | ||||
| Events are authentik's built-in logging system. Whenever any of the following actions occur, an event is created: | ||||
| Events are authentik's built-in logging system. Every event is logged, whether it is initiated by a user or by authentik. | ||||
|  | ||||
| Events can be used to define [notification rules](notifications.md), with specified [transport options](transports.md) of local (in the authentik UI), email or webhook. | ||||
|  | ||||
| Certain information is stripped from events, to ensure no passwords or other credentials are saved in the log. | ||||
|  | ||||
| ## Event retention | ||||
|  | ||||
| The event retention is configured in the system settings interface, with the default being set to 365 days. | ||||
| The event retention is configured in the **System > Settings** area of the Admin interface, with the default being set to 365 days. | ||||
|  | ||||
| If you want to forward these events to another application, forward the log output of all authentik containers. Every event creation is logged with the log level "info". For this configuration, it is also recommended to set the internal retention pretty low (for example, `days=1`). | ||||
|  | ||||
| ## Event actions | ||||
|  | ||||
| Whenever any of the following actions occur, an event is created. | ||||
|  | ||||
| ### `login` | ||||
|  | ||||
| A user logs in (including the source, if available) | ||||
|  | ||||
| @ -8,9 +8,7 @@ To prevent infinite loops (events created by policies which are attached to a No | ||||
|  | ||||
| ## Filtering Events | ||||
|  | ||||
| Starting with authentik 0.15, you can create notification rules, which can alert you based on the creation of certain events. | ||||
|  | ||||
| Filtering is done by using the Policy Engine. You can do simple filtering using the "Event Matcher Policy" type. | ||||
| An authentik administrator can create notification rules based on the creation of specified events. Filtering is done by using the Policy Engine. You can do simple filtering using the "Event Matcher Policy" type. | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -716,7 +716,7 @@ export default { | ||||
|                         { | ||||
|                             type: "category", | ||||
|                             label: "2025", | ||||
|                             items: ["security/cves/CVE-2025-29928"], | ||||
|                             items: ["security/cves/CVE-2025-52553", "security/cves/CVE-2025-29928"], | ||||
|                         }, | ||||
|                         { | ||||
|                             type: "category", | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	