์๋ ํ์ธ์,
์ฐ๋ฆฌ ์๋ฒ์์ Etherpad๊ฐ ์ค๋จ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ถ์พํ ์ฟผ๋ฆฌ์ ์์กดํ์ต๋๋ค.
https://pad.bling.org/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&vLtF%3D6904%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2CNULL%2C%27%3Cscript%3Ealert%28%22XSS%22%29%3C%2Fscript%3E%27%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--%2F%2A%2A%2F%3B%20EXEC%20xp_cmdshell%28%27cat%20..%2F..%2F..%2Fetc%2Fpasswd%27%29%23
"์ต์ํ์" ์ฟผ๋ฆฌ ์:
https://pad.bling.org/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&vLtF%3D6904%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2CNULL%2C%27%3Cscript%3Ealert(%22XSS%22)%3C%2Fscript%3E%27
์ด๊ฒ์ ์ฆ๊ฐ์ ์ธ ์ถฉ๋์ ์ ๋ฐํฉ๋๋ค.
oct. 23 18:17:19 pad.bling.org run.sh[8976]: [2018-10-23 18:17:19.994] [ERROR] console - Error: ENAMETOOLONG: name too long, open '/var/www/etherpad-lite/var/minified_L2phdmFzY3JpcHRzL2xpYi9lcF9ldGhlcn
oct. 23 18:17:19 pad.bling.org run.sh[8976]: at Error (native)
oct. 23 18:17:19 pad.bling.org run.sh[8976]: [2018-10-23 18:17:19.995] [INFO] console - graceful shutdown...
oct. 23 18:17:20 pad.bling.org run.sh[8976]: [2018-10-23 18:17:20.091] [INFO] console - db sucessfully closed.
๋
ธ๋ v6.14.4๊ฐ ์๋ Debian Stretch์์ 1.7.0 ํ๋ ์ด๋ฒ๋ฅผ ์คํํ๊ณ ์์ผ๋ฉฐ ํน์ ์ฌ์ฉ์ ์ง์ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋
๋ฆฝ์ ์ธ Etherpad ์ค์น์์ ๋์์ ์ฌํํ์ต๋๋ค.
์ฌ์ค์
๋๋ค.
์์คํ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค @fpoulain , ๊ฐ์ฌํฉ๋๋ค!
์ฌ๋ฌ๋ถ, ์ฑ ์ ์๋ ๊ณต๊ฐ์ ๋ํ ์๋ฆผ์ ๋๋ค. ์ ํํ ๊ธฐํ๋ฅผ ์ฃผ์ง ์๊ณ ๊ณต๊ฐ์ ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ ๋งค์ฐ ์ํํ ์ ์์ต๋๋ค.
์ฌ๋ฌ๋ถ, ์ฑ ์ ์๋ ๊ณต๊ฐ์ ๋ํ ์๋ฆผ์ ๋๋ค. ์ ํํ ๊ธฐํ๋ฅผ ์ฃผ์ง ์๊ณ ๊ณต๊ฐ์ ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ ๋งค์ฐ ์ํํ ์ ์์ต๋๋ค.
ํ ... ์ค์ ๋ก ์ผ๋ถ ๋ชป๋ ๋๋ค์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๊ณต๊ฐ๋์์ต๋๋ค.
๋ํ ๋น๊ณต๊ฐ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ณ ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ๋ก์ ํธ ์ค๋ช ์๋ ๋ณด์ ๋ฌธ์ ์ ๋ํ ๋น๊ณต๊ฐ ํผ๋๋ฐฑ ๋ฃจํ๊ฐ ์ธ๊ธ๋์ด ์์ง ์์ต๋๋ค. ๋ด๊ฐ ์ด๋ป๊ฒ ์ ๊ณ ํ์ ๊ฒ ๊ฐ์?
Afaik ์ฐ๋ฆฌ๋ ์ฑ ์ ์๋ ๊ณต๊ฐ ์ ์ฑ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด etherpad.org์ github readme์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๋ณด๋ธ ์ฌ๋: Franรงois Poulain [email protected]
๋ณด๋ธ ๋ ์ง: 2019๋
1์ 21์ผ ์์์ผ ์ค์ 11์ 16๋ถ
๋ฐ๋ ์ฌ๋: ether/etherpad-lite
์ฐธ์กฐ: John McLear; ๋
ผํ
์ ๋ชฉ: Re: [ether/etherpad-lite] SQL ์ฃผ์
์๋๊ฐ Etherpad ๋ผ์ดํธ๋ฅผ ์ฃฝ์
๋๋ค(#3502).
์ฌ๋ฌ๋ถ, ์ฑ ์ ์๋ ๊ณต๊ฐ์ ๋ํ ์๋ฆผ์ ๋๋ค. ์ ํํ ๊ธฐํ๋ฅผ ์ฃผ์ง ์๊ณ ๊ณต๊ฐ์ ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ ๋งค์ฐ ์ํํ ์ ์์ต๋๋ค.
ํ ... ์ค์ ๋ก ์ผ๋ถ ๋ชป๋ ๋๋ค์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๊ณต๊ฐ๋์์ต๋๋ค.
๋ํ ๋น๊ณต๊ฐ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ณ ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ๋ก์ ํธ ์ค๋ช ์๋ ๋ณด์ ๋ฌธ์ ์ ๋ํ ๋น๊ณต๊ฐ ํผ๋๋ฐฑ ๋ฃจํ๊ฐ ์ธ๊ธ๋์ด ์์ง ์์ต๋๋ค. ๋ด๊ฐ ์ด๋ป๊ฒ ์ ๊ณ ํ์ ๊ฒ ๊ฐ์?
-
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub https://github.com/ether/etherpad-lite/issues/3502#issuecomment-456039980 ์์ ํ์ธํ๊ฑฐ๋ https://github.com/notifications/unsubscribe-auth/ ์ค๋ ๋๋ฅผ ์์๊ฑฐ
"๋ณด์ ๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๊น? ...๋ฅผ ํตํด ์๋ ค์ฃผ์ญ์์ค."๋ผ๋ ์ด๋์ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ํธ๋ฅผ ์ด๊ธฐ ์ ์ github์ readme์ etherpad.org์์ ๊ทธ๋ฐ ์ด๋์ฅ์ ์ฐพ์ง ๋ชปํ ์ฑ ๋ช ๋ถ์ ๋ณด๋์ต๋๋ค. ๋ํ, ์์ด๊ฐ ๋ชจ๊ตญ์ด๊ฐ ์๋ ๋ ์๋ก์ ๋๋ ์ฐพ์์ผ ํ ์ข์ ์กฐ๊ฑด์ ๋์น ์ ์์์ต๋๋ค.
์ ๋ช ํ. Tnx
๋ณด๋ธ ์ฌ๋: Franรงois Poulain [email protected]
๋ณด๋: 2019๋
1์ 21์ผ ์์์ผ ์คํ 2์ 35๋ถ
๋ฐ๋ ์ฌ๋: ether/etherpad-lite
์ฐธ์กฐ: John McLear; ๋
ผํ
์ ๋ชฉ: Re: [ether/etherpad-lite] SQL ์ฃผ์
์๋๊ฐ Etherpad ๋ผ์ดํธ๋ฅผ ์ฃฝ์
๋๋ค(#3502).
"๋ณด์ ๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๊น? ...๋ฅผ ํตํด ์๋ ค์ฃผ์ญ์์ค."๋ผ๋ ์ด๋์ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ํธ๋ฅผ ์ด๊ธฐ ์ ์ github์ etherpad.org์์ ๊ทธ๋ฐ ์ด๋์ฅ์ ์ฐพ์ง ๋ชปํ ์ฑ ๋ช ๋ถ์ ๋ณด๋์ต๋๋ค. ๋ํ, ์์ด๊ฐ ๋ชจ๊ตญ์ด๊ฐ ์๋ ๋ ์๋ก์ ๋๋ ์ฐพ์์ผ ํ ์ข์ ์กฐ๊ฑด์ ๋์น ์ ์์์ต๋๋ค.
-
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ํ์ ํ๊ฑฐ๋ GitHub https://github.com/ether/etherpad-lite/issues/3502#issuecomment-456096384 ์์ ํ์ธํ๊ฑฐ๋ https://github.com/notifications/unsubscribe-auth/ ์ค๋ ๋๋ฅผ ์์๊ฑฐ
์ ๋ ๋ชป ์ฐพ์์ง๋ง https://github.com/ether/etherpad-lite/issues/2499 ํ๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด PR์ ์์ฒญํ์ ๊ฒ์ ์ฐพ์์ต๋๋ค
๋น ๋ฅธ ์์ ์ผ๋ก https://securitytxt.org/ ๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํ์๊ฒ ์ต๋๊น?
๋ฌธ์ ๊ฐ ๋๋ ์ฝ๋๋ ์ฌ๊ธฐ ์ด๋๊ฐ์ ์์ต๋๋ค: https://github.com/ether/yajsml/blob/master/server.js#L98
๋ฉด์ฑ ์กฐํญ: ์ ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋งํผ ๋๋ํ์ง ์์ต๋๋ค. ๋์์ค ์ ๋ฌธ ์ง์์ด ์๋ ์ฌ๋์ด ํ์ํฉ๋๋ค!
์ด๋ด! ์ง๊ธ ์ด๊ฒ์ ๋ํด ์กฐ์ฌ ์ค์ ๋๋ค.
๋จผ์ : SQLi์ ๋ํ ๋๋ ค์์ ์์ ๊ธฐ ์ํด: ๋์ผํ ์ถฉ๋์ ์ผ์ผํค๋ ์ด ๋์ฒด ํ์ด๋ก๋์์ ์ ์ ์๋ฏ์ด ์ด๊ฒ์ SQL ์ฃผ์ ๊ณผ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค.
/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&footlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootlefootle
์ด๊ฒ์ ์บ์ฑ ๋ฏธ๋ค์จ์ด์ ํ์ผ ์ด๋ฆ ๊ธธ์ด ๋ฌธ์ ์ ๋๋ค.
ํ์ฌ ์บ์ ํค๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
var cacheKey = Buffer.from(path).toString('base64').replace(/[/+=]/g, '');
์ด๋ก ์ธํด ์บ์ ํค ๊ธธ์ด๊ฐ ๊ฒฝ๋ก ๊ธธ์ด๋ก ์ ์ด๋ฉ๋๋ค.
์ด๊ฒ์ ๋ง์ ํ์ผ ์์คํ
์ด ํ์ผ ์ด๋ฆ ๊ธธ์ด๋ฅผ 255์๋ก ์ ํํ๊ธฐ ๋๋ฌธ์ ์บ์ ํค๊ฐ ๋์คํฌ์ ํ์ผ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋ ๋ ๋ฌธ์ ์
๋๋ค. ์ด๊ฒ์ด ๋ก๊ทธ์ ENAMETOOLONG
์ค๋ฅ๊ฐ ์๋ ์ด์ ์
๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฒ์ ๋์ ์บ์ ํค๋ฅผ ๊ฒฝ๋ก์ ํด์๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ณ ์ ๊ธธ์ด ํ์ผ ์ด๋ฆ์ด ๋ณด์ฅ๋ฉ๋๋ค.
๊ณง์ด ์์ ์ ์ํํ๋ PR์ ์ ์ถํ ๊ฒ์ ๋๋ค.
์๋ ํ์ธ์, @tomnomnom ์ ๋๋ค. ์บ์ ํค์ ๊ธธ์ด๊ฐ ๊ณ ์ ๋์ด ์๋ค๋ ๊ฒ์ ์์ ํ ์ด์น์ ๋ง์ต๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ถฉ๋ ์ํ์ด ๊ฑฐ์ ์๋ ์ํ์์ ์ฝํ ์ธ ์ ๊ณ์ ์์กดํฉ๋๋ค.
์ค๋ ๋ฐค์ ๋ด์ผ๊ฒ ๋ค.
์ ํ์ด์!
PR์ ๋ณํฉํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
์ด์ ๋ํ ์ถ๊ฐ ์ฐธ๊ณ ์ฌํญ: nodejs ๋ฌธ์ ์์ crypto
๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํด์ผ ํ ์๋ ์์ต๋๋ค .
์ํธํ ๋ชจ๋์ ๋ํ ์ง์์ ํฌํจํ์ง ์๊ณ Node.js๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ require('crypto')๋ฅผ ํธ์ถํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ฒ ๋๋ ํ๋ซํผ์ ์์ ์๋ ์์ต๋๋ค(์: ARM, MIPS, Raspberry PI ๋ฑ)? ๋ชจ๋ฅด๊ฒ ์ด์. ์ด๋ฌํ ์๋๋ฆฌ์ค์ ๋ํ ์ค๋ช ์ ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค .
- ๋ฆฌ์์ค ๋๋ ๋ณด์์ด ์ ํ๋ ํ๊ฒฝ์์ ๋นํ์ค ๋ ธ๋ ์คํ(์ด ์๋๋ฆฌ์ค์ ๋ํ ๋ช ์์ ์ง์์ node#5611 ์ฐธ์กฐ)
- ์๋ฎฌ๋ ์ดํธ๋ ํ๊ฒฝ์์ ์คํ(browserify, webpack ๋ฑ)
- ์์ค์์ ๋ ธ๋ ๋น๋ ๋ฐ ์์์ ์ด์ ๋ก openssl/crypto ์๋ต( StackOverflow ์ง๋ฌธ ๋๋ ๋ค๋ฅธ nodejs ๊ฒ์๋ฌผ ์ฐธ์กฐ )
์ด์จ๋ , ํ์ดํ ๋ผ์ดํฐ๋ค์์ด ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌ https://github.com/microsoft/TypeScript/issues/19100 , ๊ทธ๋ค์์์ ์ฐ์ํ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ https://github.com/microsoft/TypeScript/commit/ 9677b0641cc5ba7d8b701b4f892ed7e54ceaee9a.
์ํธํ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ฐํ์์ ์คํจํ๋ฉด ํด์ ์๊ณ ๋ฆฌ์ฆ djb2 โโ์๊ณ ๋ฆฌ์ฆ ์ ๋์ฒดํฉ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์ ์ ํฉํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
function djb2Hash(data) {
const chars = data.split("").map(str => str.charCodeAt(0));
return `${chars.reduce((prev, curr) => ((prev << 5) + prev) + curr, 5381)}`;
}
console.log(Buffer.from(djb2Hash('This is a ๐ test of the djb2 hash function')).toString('hex'));
// prints 36373536373437333033
๋๋ ๋น์ ์๊ฒ ์ด๊ฒ์ ์๊ตฌํ์ง ์์ง๋ง djb2 ์ด์ผ๊ธฐ๋ ์ฌ๋ฏธ์์ต๋๋ค. ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐ Daniel Bernstein ์ด 1991๋ ์ ์์ฑํ ์๋ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ๊ฒ์๋ฌผ ์ ์ฐธ์กฐ ํ์ญ์์ค . ๊ทธ๋ ๋น์ 20์ธ์์ต๋๋ค .
์ํธํ ์ง์์ด ์์ ๋ djb2
๋ฅผ ์ฌ์ฉํ๋ ํ์ ์กฐ์น: #3797.