Skip to content

Commit ee44fd6

Browse files
committed
fix: add missing idp link server side validation
1 parent 6cf1da7 commit ee44fd6

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

  • apps/login/src/app/(main)/(boxed)/idp/[provider]/success

apps/login/src/app/(main)/(boxed)/idp/[provider]/success/page.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { loginFailed } from "@/components/idps/pages/login-failed";
66
import { loginSuccess } from "@/components/idps/pages/login-success";
77
import { registrationFailed } from "@/components/idps/pages/registration-failed";
88
import { Translated } from "@/components/translated";
9+
import { getMostRecentSessionCookie } from "@/lib/cookies";
910
import { generateRouteMetadata } from "@/lib/metadata";
1011
import { getServiceUrlFromHeaders } from "@/lib/service-url";
1112
import {
@@ -15,6 +16,7 @@ import {
1516
getIDPByID,
1617
getLoginSettings,
1718
getOrgsByDomain,
19+
getSession,
1820
listUsers,
1921
retrieveIDPIntent,
2022
updateHuman,
@@ -266,6 +268,29 @@ export default async function Page(props: {
266268
if (!resolvedUserId) {
267269
return linkingFailed("User context missing");
268270
}
271+
272+
try {
273+
const recentCookie = await getMostRecentSessionCookie();
274+
const { session } = await getSession({
275+
serviceUrl,
276+
sessionId: recentCookie.id,
277+
sessionToken: recentCookie.token,
278+
});
279+
280+
if (session?.factors?.user?.id !== resolvedUserId) {
281+
console.error(
282+
"Security Violation: Attempt to link IDP to different user",
283+
{
284+
sessionUserId: session?.factors?.user?.id,
285+
targetUserId: resolvedUserId,
286+
},
287+
);
288+
return linkingFailed("Access Denied");
289+
}
290+
} catch {
291+
return linkingFailed("Error getting user session");
292+
}
293+
269294
if (!options?.isLinkingAllowed) {
270295
// linking was probably disallowed since the invitation was created
271296
return linkingFailed("Linking is no longer allowed");

0 commit comments

Comments
 (0)