refactor(frontmatter): constrain frontmatter object after parsing

This change removes the meta-marked dependency which solely was
used for extracting the frontmatter, which is possible as well
with one function. Furthermore, this introduces constraints to
objects resulting from frontmatter parsing and enforces them in
order to prevent attacks like a yaml bomb (massive alias expansion).
This change should resolve a possible DoS attack.

Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson
2026-06-09 22:09:03 +02:00
parent fbd7307f16
commit c489497e45
10 changed files with 212 additions and 64 deletions

View File

@@ -412,16 +412,6 @@ __metadata:
languageName: node
linkType: hard
"@hedgedoc/meta-marked@npm:14.1.0":
version: 14.1.0
resolution: "@hedgedoc/meta-marked@npm:14.1.0"
dependencies:
js-yaml: "npm:~4.1.0"
marked: "npm:14.1.0"
checksum: 10/f14edf09cd7d33e20ae1a0e8895688613691acf55cc204b96134bbc5a9ab85df4cc73deea26baebf897b18f315bb0e144df0a34519813aae9aaae9293cae2db2
languageName: node
linkType: hard
"@humanfs/core@npm:^0.19.1":
version: 0.19.1
resolution: "@humanfs/core@npm:0.19.1"
@@ -1501,7 +1491,6 @@ __metadata:
"@eslint/eslintrc": "npm:3.3.5"
"@eslint/js": "npm:9.39.4"
"@hedgedoc/codemirror-5": "npm:5.65.12"
"@hedgedoc/meta-marked": "npm:14.1.0"
"@node-saml/passport-saml": "npm:5.1.0"
"@passport-next/passport-openid": "npm:1.0.0"
Idle.Js: "git+https://github.com/shawnmclean/Idle.js#commit=2b57cc6e49d177b7ddce0cca00ef5cbe07453541"
@@ -1528,6 +1517,7 @@ __metadata:
compression: "npm:1.8.1"
connect-flash: "npm:0.1.1"
connect-session-sequelize: "npm:8.0.6"
constrain-object: "npm:1.1.0"
cookie: "npm:1.1.1"
cookie-parser: "npm:1.4.7"
copy-webpack-plugin: "npm:6.4.1"
@@ -1569,7 +1559,7 @@ __metadata:
jquery-ui: "npm:1.14.2"
js-cookie: "npm:3.0.8"
js-sequence-diagrams: "git+https://github.com/hedgedoc/js-sequence-diagrams.git"
js-yaml: "npm:3.14.2"
js-yaml: "npm:4.2.0"
jsdom: "npm:24.1.3"
jsonlint: "npm:1.6.3"
keymaster: "npm:1.6.2"
@@ -1967,15 +1957,6 @@ __metadata:
languageName: node
linkType: hard
"argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
dependencies:
sprintf-js: "npm:~1.0.2"
checksum: 10/c6a621343a553ff3779390bb5ee9c2263d6643ebcd7843227bdde6cc7adbed796eb5540ca98db19e3fd7b4714e1faa51551f8849b268bb62df27ddb15cbcd91e
languageName: node
linkType: hard
"argparse@npm:^2.0.1":
version: 2.0.1
resolution: "argparse@npm:2.0.1"
@@ -4295,6 +4276,13 @@ __metadata:
languageName: node
linkType: hard
"constrain-object@npm:1.1.0":
version: 1.1.0
resolution: "constrain-object@npm:1.1.0"
checksum: 10/0500dad5fd2d01c2c7269259bec731cfb0a2ee7dcef33d0cb92b3ff32dd15d60e47f1fd23da6678aa09f3d4ec3a032b99e2950364c6fa088c64d463c01fd3eec
languageName: node
linkType: hard
"content-disposition@npm:~0.5.4":
version: 0.5.4
resolution: "content-disposition@npm:0.5.4"
@@ -6643,16 +6631,6 @@ __metadata:
languageName: node
linkType: hard
"esprima@npm:^4.0.0":
version: 4.0.1
resolution: "esprima@npm:4.0.1"
bin:
esparse: ./bin/esparse.js
esvalidate: ./bin/esvalidate.js
checksum: 10/f1d3c622ad992421362294f7acf866aa9409fbad4eb2e8fa230bd33944ce371d32279667b242d8b8907ec2b6ad7353a717f3c0e60e748873a34a7905174bc0eb
languageName: node
linkType: hard
"esquery@npm:^1.5.0":
version: 1.7.0
resolution: "esquery@npm:1.7.0"
@@ -9292,19 +9270,18 @@ __metadata:
languageName: node
linkType: hard
"js-yaml@npm:3.14.2":
version: 3.14.2
resolution: "js-yaml@npm:3.14.2"
"js-yaml@npm:4.2.0":
version: 4.2.0
resolution: "js-yaml@npm:4.2.0"
dependencies:
argparse: "npm:^1.0.7"
esprima: "npm:^4.0.0"
argparse: "npm:^2.0.1"
bin:
js-yaml: bin/js-yaml.js
checksum: 10/172e0b6007b0bf0fc8d2469c94424f7dd765c64a047d2b790831fecef2204a4054eabf4d911eb73ab8c9a3256ab8ba1ee8d655b789bf24bf059c772acc2075a1
checksum: 10/51de2067a2b44b07ba5206132e56005f8b568ff279bb4d2f645068958c56fa4827d40a6841c983234671fa0a134bf094d0b0717873c2a3d319185297af145a6d
languageName: node
linkType: hard
"js-yaml@npm:^4.1.0, js-yaml@npm:^4.1.1, js-yaml@npm:~4.1.0":
"js-yaml@npm:^4.1.0, js-yaml@npm:^4.1.1":
version: 4.1.1
resolution: "js-yaml@npm:4.1.1"
dependencies:
@@ -10247,15 +10224,6 @@ __metadata:
languageName: node
linkType: hard
"marked@npm:14.1.0":
version: 14.1.0
resolution: "marked@npm:14.1.0"
bin:
marked: bin/marked.js
checksum: 10/1a930dd87a3994cc4fcc72c4668c548429d0e6363b8f7660193c106fa1cadcde5c813cfc3fe4be42b9f18b3652ba73469fb6c718215b0dbf8ddb9de2d1f5ab38
languageName: node
linkType: hard
"math-interval-parser@npm:^2.0.1":
version: 2.0.1
resolution: "math-interval-parser@npm:2.0.1"
@@ -15762,13 +15730,6 @@ __metadata:
languageName: node
linkType: hard
"sprintf-js@npm:~1.0.2":
version: 1.0.3
resolution: "sprintf-js@npm:1.0.3"
checksum: 10/c34828732ab8509c2741e5fd1af6b767c3daf2c642f267788f933a65b1614943c282e74c4284f4fa749c264b18ee016a0d37a3e5b73aee446da46277d3a85daa
languageName: node
linkType: hard
"sql-escaper@npm:^1.3.3":
version: 1.3.3
resolution: "sql-escaper@npm:1.3.3"