mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-19 11:01:15 +00:00
fix(core): Use timing safe function to compare runner auth tokens (#12485)
This commit is contained in:
@@ -33,11 +33,11 @@ describe('TaskRunnerAuthService', () => {
|
|||||||
|
|
||||||
describe('isValidAuthToken', () => {
|
describe('isValidAuthToken', () => {
|
||||||
it('should be valid for the configured token', () => {
|
it('should be valid for the configured token', () => {
|
||||||
expect(authService.isValidAuthToken('random-secret'));
|
expect(authService.isValidAuthToken('random-secret')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be invalid for anything else', () => {
|
it('should be invalid for anything else', () => {
|
||||||
expect(authService.isValidAuthToken('!random-secret'));
|
expect(authService.isValidAuthToken('!random-secret')).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { GlobalConfig } from '@n8n/config';
|
import { GlobalConfig } from '@n8n/config';
|
||||||
import { Service } from '@n8n/di';
|
import { Service } from '@n8n/di';
|
||||||
import { randomBytes } from 'crypto';
|
import { randomBytes, timingSafeEqual } from 'crypto';
|
||||||
|
|
||||||
import { Time } from '@/constants';
|
import { Time } from '@/constants';
|
||||||
import { CacheService } from '@/services/cache/cache.service';
|
import { CacheService } from '@/services/cache/cache.service';
|
||||||
@@ -9,6 +9,8 @@ const GRANT_TOKEN_TTL = 15 * Time.seconds.toMilliseconds;
|
|||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export class TaskRunnerAuthService {
|
export class TaskRunnerAuthService {
|
||||||
|
private readonly authToken = Buffer.from(this.globalConfig.taskRunners.authToken);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly globalConfig: GlobalConfig,
|
private readonly globalConfig: GlobalConfig,
|
||||||
private readonly cacheService: CacheService,
|
private readonly cacheService: CacheService,
|
||||||
@@ -17,7 +19,10 @@ export class TaskRunnerAuthService {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
isValidAuthToken(token: string) {
|
isValidAuthToken(token: string) {
|
||||||
return token === this.globalConfig.taskRunners.authToken;
|
const tokenBuffer = Buffer.from(token);
|
||||||
|
if (tokenBuffer.length !== this.authToken.length) return false;
|
||||||
|
|
||||||
|
return timingSafeEqual(tokenBuffer, this.authToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user