mirror of
https://github.com/bitwarden/browser
synced 2025-12-15 15:53:27 +00:00
[CSA-28] Use path normalization in API requests (#4580)
* Use path normalization in API requests * Remove CLI webpack config change that's unneeded * Add additional tests
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
/* eslint-disable no-useless-escape */
|
||||
import * as path from "path";
|
||||
|
||||
import { getHostname, parse } from "tldts";
|
||||
import { Merge } from "type-fest";
|
||||
|
||||
@@ -498,6 +500,15 @@ export class Utils {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a path for defense against attacks like traversals
|
||||
* @param denormalizedPath
|
||||
* @returns
|
||||
*/
|
||||
static normalizePath(denormalizedPath: string): string {
|
||||
return path.normalize(decodeURIComponent(denormalizedPath)).replace(/^(\.\.(\/|\\|$))+/, "");
|
||||
}
|
||||
|
||||
private static isMobile(win: Window) {
|
||||
let mobile = false;
|
||||
((a) => {
|
||||
|
||||
@@ -1962,11 +1962,8 @@ export class ApiService implements ApiServiceAbstraction {
|
||||
): Promise<any> {
|
||||
apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;
|
||||
|
||||
const requestUrl = apiUrl + path;
|
||||
// Prevent directory traversal from malicious paths
|
||||
if (new URL(requestUrl).href !== requestUrl) {
|
||||
return Promise.reject("Invalid request url path.");
|
||||
}
|
||||
const requestUrl = apiUrl + Utils.normalizePath(path);
|
||||
|
||||
const headers = new Headers({
|
||||
"Device-Type": this.deviceType,
|
||||
|
||||
Reference in New Issue
Block a user