Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 1 addition & 9 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Nous suivons un processus de **divulgation coordonnée** :

- **Security advisory GitHub** : créez un *security advisory* privé sur le dépôt
(onglet *Security → Advisories*), ou ouvrez un rapport privé via l'interface de signalement.
- **Email** : *(à renseigner — adresse de contact sécurité du mainteneur)*.
- **Email** : contact@data-plyers.com

## Scope

Expand All @@ -32,14 +32,6 @@ Ce périmètre concerne le code du dépôt : `packages/engine`, `packages/main`,
Sont hors périmètre : les dépendances tierces (signaler via leur propre politique) et les
services hébergés par des tiers.

## Exemples de vulnérabilités pertinentes

- Exécution de code (RCE) via les `eval` / `new Function` de l'engine.
- Injection / évaluation non sécurisée dans les composants de transformation, filtrage, Mongo.
- Prototype pollution via les données injectées.
- ReDoS / déni de service via les expressions regex ou `$where`.
- Accès non autorisé aux endpoints d'exécution (authentification / autorisation).

## Reporting security advisories

Les divulgations coordonnées sont documentées dans `advisories/`. La politique de sécurité est
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "semantic-bus-monorepo",
"version": "0.11.16",
"version": "0.11.18",
"description": "ETL style data middleware transformation embedded in an ESB for all kind of data",
"private": true,
"workspaces": [
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@semantic-bus/core",
"version": "0.11.17",
"version": "0.11.18",
"description": "Core module for Semantic Bus",
"private": true,
"main": "index.js",
Expand Down
35 changes: 35 additions & 0 deletions packages/engine/__tests__/utils/validateExpression.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,41 @@ describe('validateExpression - contrôle du contenu avant éval', () => {
}
});

describe('classe des clés statiquement constantes (review chercheur 2026-08-26)', () => {
// Nouvelle review du chercheur : foldStaticValue ne résolvait que 3 types
// de nœuds ; tout le reste était traité comme "dynamique" et contournait
// les gardes. Posture fail-closed + flux de valeur à travers les branches.
const constantKeyAttacks = [
"he[(0,'constructor')]", // séquence
"he[(false||'constructor')]", // logique ||
"he[(true&&'constructor')]", // logique &&
"he[(null??'constructor')]", // logique ??
"he[(1?'constructor':'x')]", // ternaire
"he[['constructor'][0]]", // index de tableau
'he[String.fromCharCode(99,111,110,115,116,114,117,99,116,111,114)]', // appel
"he[(obj,'constructor')]", // séquence : dernier = constant
"he[(x?['constructor']:[v])[0]]", // ternaire dynamique, branche interdite
"he['CONSTRUCTOR'.toLowerCase()]", // méthode String sur littéral
"he['xconstructor'.slice(1)]",
"he['con'.concat('structor')]",
"he['constructor'.repeat(1)]",
"he['constructor'.toString()]",
"he[String('constructor')]",
"he[Array.of('constructor')[0]]",
"he[Object.keys({constructor:1})[0]]",
"he[({k:'constructor'}).k]", // membre de littéral objet
"he[(0, 'con'+'structor')]", // séquence + concat
// PoC end-to-end du chercheur (atteignent host Function / lodash.template)
"he[(0,'constructor')][(0,'constructor')]('return process.pid')()",
"_[(0,'template')]('<%= 7*6 %>')({})"
];
for (const src of constantKeyAttacks) {
test(`bloque (fail-closed/flux): ${src.slice(0, 50)}`, () => {
expect(() => validateExpression(src)).toThrow();
});
}
});

describe('cas légitimes préservés', () => {
test('index numériques et clés dynamiques', () => {
expect(() => validateExpression('arr[0]')).not.toThrow();
Expand Down
2 changes: 1 addition & 1 deletion packages/engine/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@semantic-bus/engine",
"version": "0.11.17",
"version": "0.11.18",
"description": "Processing engine module for Semantic Bus",
"private": true,
"main": "app.js",
Expand Down
Loading
Loading