-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'origin/master' into develop
- Loading branch information
Showing
82 changed files
with
1,048 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,47 @@ | ||
# @rocket.chat/meteor | ||
|
||
## 6.10.1 | ||
|
||
### Patch Changes | ||
|
||
- Bump @rocket.chat/meteor version. | ||
|
||
- Bump @rocket.chat/meteor version. | ||
|
||
- ([#32819](https://github.com/RocketChat/Rocket.Chat/pull/32819) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixed issue with livechat agents not being able to leave omnichannel rooms if joining after a room has been closed by the visitor (due to race conditions) | ||
|
||
- ([#32894](https://github.com/RocketChat/Rocket.Chat/pull/32894)) Security Hotfix (https://docs.rocket.chat/docs/security-fixes-and-updates) | ||
|
||
- ([#32829](https://github.com/RocketChat/Rocket.Chat/pull/32829) by [@dionisio-bot](https://github.com/dionisio-bot)) Fixes an issue not displaying all groups in settings list | ||
|
||
- ([#32836](https://github.com/RocketChat/Rocket.Chat/pull/32836) by [@dionisio-bot](https://github.com/dionisio-bot)) Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) | ||
|
||
- <details><summary>Updated dependencies []:</summary> | ||
|
||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
</details> | ||
|
||
## 6.10.0 | ||
|
||
### Minor Changes | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 changes: 100 additions & 0 deletions
100
apps/meteor/app/lib/server/functions/checkUrlForSsrf.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
import { lookup } from 'dns'; | ||
|
||
// https://en.wikipedia.org/wiki/Reserved_IP_addresses + Alibaba Metadata IP | ||
const ranges: string[] = [ | ||
'0.0.0.0/8', | ||
'10.0.0.0/8', | ||
'100.64.0.0/10', | ||
'127.0.0.0/8', | ||
'169.254.0.0/16', | ||
'172.16.0.0/12', | ||
'192.0.0.0/24', | ||
'192.0.2.0/24', | ||
'192.88.99.0/24', | ||
'192.168.0.0/16', | ||
'198.18.0.0/15', | ||
'198.51.100.0/24', | ||
'203.0.113.0/24', | ||
'224.0.0.0/4', | ||
'240.0.0.0/4', | ||
'255.255.255.255', | ||
'100.100.100.200/32', | ||
]; | ||
|
||
export const nslookup = async (hostname: string): Promise<string> => { | ||
return new Promise((resolve, reject) => { | ||
lookup(hostname, (error, address) => { | ||
if (error) { | ||
reject(error); | ||
} else { | ||
resolve(address); | ||
} | ||
}); | ||
}); | ||
}; | ||
|
||
export const ipToLong = (ip: string): number => { | ||
return ip.split('.').reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0) >>> 0; | ||
}; | ||
|
||
export const isIpInRange = (ip: string, range: string): boolean => { | ||
const [rangeIp, subnet] = range.split('/'); | ||
const ipLong = ipToLong(ip); | ||
const rangeIpLong = ipToLong(rangeIp); | ||
const mask = ~(2 ** (32 - Number(subnet)) - 1); | ||
return (ipLong & mask) === (rangeIpLong & mask); | ||
}; | ||
|
||
export const isIpInAnyRange = (ip: string): boolean => ranges.some((range) => isIpInRange(ip, range)); | ||
|
||
export const isValidIPv4 = (ip: string): boolean => { | ||
const octets = ip.split('.'); | ||
if (octets.length !== 4) return false; | ||
return octets.every((octet) => { | ||
const num = Number(octet); | ||
return num >= 0 && num <= 255 && octet === num.toString(); | ||
}); | ||
}; | ||
|
||
export const isValidDomain = (domain: string): boolean => { | ||
const domainPattern = /^(?!-)(?!.*--)[A-Za-z0-9-]{1,63}(?<!-)\.?([A-Za-z]{2,63}\.?)*[A-Za-z]{2,63}$/; | ||
if (!domainPattern.test(domain)) { | ||
return false; | ||
} | ||
return true; | ||
}; | ||
|
||
export const checkUrlForSsrf = async (url: string): Promise<boolean> => { | ||
if (!(url.startsWith('http://') || url.startsWith('https://'))) { | ||
return false; | ||
} | ||
|
||
const [, address] = url.split('://'); | ||
const ipOrDomain = address.includes('/') ? address.split('/')[0] : address; | ||
|
||
if (!(isValidIPv4(ipOrDomain) || isValidDomain(ipOrDomain))) { | ||
return false; | ||
} | ||
|
||
if (isValidIPv4(ipOrDomain) && isIpInAnyRange(ipOrDomain)) { | ||
return false; | ||
} | ||
|
||
if (isValidDomain(ipOrDomain) && /metadata.google.internal/.test(ipOrDomain.toLowerCase())) { | ||
return false; | ||
} | ||
|
||
if (isValidDomain(ipOrDomain)) { | ||
try { | ||
const ipAddress = await nslookup(ipOrDomain); | ||
if (isIpInAnyRange(ipAddress)) { | ||
return false; | ||
} | ||
} catch (error) { | ||
console.log(error); | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
export const validateNameChars = (name: string | undefined): boolean => { | ||
if (typeof name !== 'string') { | ||
return false; | ||
} | ||
|
||
const invalidChars = /[<>\\/]/; | ||
if (invalidChars.test(name)) { | ||
return false; | ||
} | ||
|
||
try { | ||
const decodedName = decodeURI(name); | ||
if (invalidChars.test(decodedName)) { | ||
return false; | ||
} | ||
} catch (err) { | ||
return false; | ||
} | ||
|
||
return true; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,18 @@ | ||
# rocketchat-services | ||
|
||
## 1.2.1 | ||
|
||
### Patch Changes | ||
|
||
- <details><summary>Updated dependencies []:</summary> | ||
|
||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
- @rocket.chat/[email protected] | ||
</details> | ||
|
||
## 1.2.0 | ||
|
||
### Minor Changes | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.