Skip to content

Commit b19defe

Browse files
committed
fix(xo-server-openmetrics): generate a 256-bit Prometheus secret
Buffer.from(getRandomValues(new Uint32Array(8))) coerces each 32-bit element to a single byte, so the generated secret held 64 bits of entropy instead of 256. Use randomBytes(32) instead. Introduced by fe29bd0
1 parent 3e4e4bb commit b19defe

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

‎packages/xo-server-openmetrics/src/index.mts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { createLogger } from '@xen-orchestra/log'
2525
import { fork, type ChildProcess } from 'node:child_process'
2626
import { dirname, join } from 'node:path'
2727
import { fileURLToPath } from 'node:url'
28-
import { getRandomValues } from 'node:crypto'
28+
import { randomBytes } from 'node:crypto'
2929
import { performance } from 'node:perf_hooks'
3030
import v8 from 'node:v8'
3131

@@ -509,7 +509,7 @@ export async function ensureSecret(
509509
return secret
510510
}
511511

512-
const generated = Buffer.from(getRandomValues(new Uint32Array(8))).toString('hex')
512+
const generated = randomBytes(32).toString('hex')
513513
await persist({ secret: generated })
514514
return generated
515515
}

‎packages/xo-server-openmetrics/src/index.test.mts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ describe('ensureSecret', () => {
2222
persisted.push(configuration)
2323
})
2424

25-
assert.match(secret, /^[0-9a-f]{16}$/)
25+
assert.match(secret, /^[0-9a-f]{64}$/)
2626
assert.deepEqual(persisted, [{ secret }])
2727
})
2828

@@ -32,7 +32,7 @@ describe('ensureSecret', () => {
3232
persisted.push(configuration)
3333
})
3434

35-
assert.match(secret, /^[0-9a-f]{16}$/)
35+
assert.match(secret, /^[0-9a-f]{64}$/)
3636
assert.deepEqual(persisted, [{ secret }])
3737
})
3838

0 commit comments

Comments
 (0)