From 64b8c1a2ded97c98b4fe785f9310c3a60fb9f15a Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Thu, 8 May 2025 23:44:30 +0400 Subject: [PATCH] added filter check --- backend/src/ee/services/ldap-config/ldap-fns.ts | 3 +-- .../routes/v1/identity-ldap-auth-router.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/src/ee/services/ldap-config/ldap-fns.ts b/backend/src/ee/services/ldap-config/ldap-fns.ts index ab23bdb45..01b70b4db 100644 --- a/backend/src/ee/services/ldap-config/ldap-fns.ts +++ b/backend/src/ee/services/ldap-config/ldap-fns.ts @@ -9,8 +9,7 @@ export const isValidLdapFilter = (filter: string) => { ldapjs.parseFilter(filter); return true; } catch (error) { - logger.error("Invalid LDAP filter"); - logger.error(error); + logger.error(error, "Invalid LDAP filter"); return false; } }; diff --git a/backend/src/server/routes/v1/identity-ldap-auth-router.ts b/backend/src/server/routes/v1/identity-ldap-auth-router.ts index 0d764425a..29c433287 100644 --- a/backend/src/server/routes/v1/identity-ldap-auth-router.ts +++ b/backend/src/server/routes/v1/identity-ldap-auth-router.ts @@ -15,6 +15,7 @@ import { z } from "zod"; import { IdentityLdapAuthsSchema } from "@app/db/schemas/identity-ldap-auths"; import { EventType } from "@app/ee/services/audit-log/audit-log-types"; +import { isValidLdapFilter } from "@app/ee/services/ldap-config/ldap-fns"; import { ApiDocsTags, LDAP_AUTH } from "@app/lib/api-docs"; import { getConfig } from "@app/lib/config/env"; import { UnauthorizedError } from "@app/lib/errors"; @@ -205,7 +206,13 @@ export const registerIdentityLdapAuthRouter = async (server: FastifyZodProvider) bindDN: z.string().trim().min(1).describe(LDAP_AUTH.ATTACH.bindDN), bindPass: z.string().trim().min(1).describe(LDAP_AUTH.ATTACH.bindPass), searchBase: z.string().trim().min(1).describe(LDAP_AUTH.ATTACH.searchBase), - searchFilter: z.string().trim().min(1).default("(uid={{username}})").describe(LDAP_AUTH.ATTACH.searchFilter), + searchFilter: z + .string() + .trim() + .min(1) + .default("(uid={{username}})") + .refine(isValidLdapFilter, "Invalid LDAP search filter") + .describe(LDAP_AUTH.ATTACH.searchFilter), allowedFields: AllowedFieldsSchema.array().optional().describe(LDAP_AUTH.ATTACH.allowedFields), ldapCaCertificate: z.string().trim().optional().describe(LDAP_AUTH.ATTACH.ldapCaCertificate), accessTokenTrustedIps: z @@ -302,7 +309,13 @@ export const registerIdentityLdapAuthRouter = async (server: FastifyZodProvider) bindDN: z.string().trim().min(1).describe(LDAP_AUTH.UPDATE.bindDN), bindPass: z.string().trim().min(1).describe(LDAP_AUTH.UPDATE.bindPass), searchBase: z.string().trim().min(1).describe(LDAP_AUTH.UPDATE.searchBase), - searchFilter: z.string().trim().min(1).default("(uid={{username}})").describe(LDAP_AUTH.UPDATE.searchFilter), + searchFilter: z + .string() + .trim() + .min(1) + .default("(uid={{username}})") + .refine(isValidLdapFilter, "Invalid LDAP search filter") + .describe(LDAP_AUTH.UPDATE.searchFilter), allowedFields: AllowedFieldsSchema.array().optional().describe(LDAP_AUTH.UPDATE.allowedFields), accessTokenTrustedIps: z .object({