Skip to content

Commit 98a83a6

Browse files
committed
permission: ensure to resolve path when calling mkdtemp
PR-URL: nodejs-private/node-private#464 Refs: https://hackerone.com/bugs?subject=nodejs&report_id=2037887 Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 1f0cde4 commit 98a83a6

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

lib/fs.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2916,6 +2916,7 @@ function mkdtemp(prefix, options, callback) {
29162916

29172917
validateString(prefix, 'prefix');
29182918
nullCheck(prefix, 'prefix');
2919+
prefix = getValidatedPath(prefix, 'prefix');
29192920
warnOnNonPortableTemplate(prefix);
29202921
const req = new FSReqCallback();
29212922
req.oncomplete = callback;
@@ -2933,6 +2934,7 @@ function mkdtempSync(prefix, options) {
29332934

29342935
validateString(prefix, 'prefix');
29352936
nullCheck(prefix, 'prefix');
2937+
prefix = getValidatedPath(prefix, 'prefix');
29362938
warnOnNonPortableTemplate(prefix);
29372939
const path = `${prefix}XXXXXX`;
29382940
const ctx = { path };

test/fixtures/permission/fs-traversal.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,19 @@ const bufferTraversalPath = Buffer.from(allowedFolder + '../file.md');
5151
}, common.expectsError({
5252
code: 'ERR_ACCESS_DENIED',
5353
permission: 'FileSystemWrite',
54-
resource: path.toNamespacedPath(path.resolve(traversalFolderPath + 'XXXXXX')),
54+
resource: path.resolve(traversalFolderPath + 'XXXXXX'),
55+
}));
56+
}
57+
58+
{
59+
assert.throws(() => {
60+
fs.mkdtemp(traversalFolderPath, (error) => {
61+
assert.ifError(error);
62+
});
63+
}, common.expectsError({
64+
code: 'ERR_ACCESS_DENIED',
65+
permission: 'FileSystemWrite',
66+
resource: path.resolve(traversalFolderPath + 'XXXXXX'),
5567
}));
5668
}
5769

@@ -72,4 +84,4 @@ const bufferTraversalPath = Buffer.from(allowedFolder + '../file.md');
7284
assert.ok(!process.permission.has('fs.write', traversalPath));
7385
assert.ok(!process.permission.has('fs.read', traversalFolderPath));
7486
assert.ok(!process.permission.has('fs.write', traversalFolderPath));
75-
}
87+
}

0 commit comments

Comments
 (0)