@bridge4dev/runner 0.69.0 → 0.69.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/regex-guard.js +44 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/regex-guard.js
CHANGED
|
@@ -327,9 +327,53 @@ export function inspectBashCommand(command) {
|
|
|
327
327
|
* значит вставать на пути каждого чтения и записи, а в обычных режимах эти
|
|
328
328
|
* инструменты и так закрыты политикой.
|
|
329
329
|
*/
|
|
330
|
+
/**
|
|
331
|
+
* `--env-file <путь>` и `--env-file=<путь>` — значение, которое уходит докеру.
|
|
332
|
+
*
|
|
333
|
+
* Кавычки учтены, потому что именно так этот флаг и пишут в гайде выкладки.
|
|
334
|
+
*/
|
|
335
|
+
const DOCKER_ENV_FILE_FLAG = /--env-file(?:=|\s+)(?:"[^"]*"|'[^']*'|\S+)/g;
|
|
336
|
+
/** Границы между командами в одной строке. Грубо и намеренно: сторож ошибается в сторону запрета. */
|
|
337
|
+
const COMMAND_SEPARATORS = /&&|\|\||;|\||\n/;
|
|
338
|
+
/**
|
|
339
|
+
* Передать файл докеру — не то же самое, что прочитать его (#463).
|
|
340
|
+
*
|
|
341
|
+
* `docker compose --env-file …` и `docker run --env-file …` содержимое файла
|
|
342
|
+
* агенту НЕ показывают: он уходит в контейнер. Правило же ловило по одному
|
|
343
|
+
* факту упоминания пути, и 19.09 вместе с дырой закрылась вся документированная
|
|
344
|
+
* выкладка — `docs/operations/deployment/rebuild-deploy.md` перестал работать из
|
|
345
|
+
* сессии целиком, включая миграции.
|
|
346
|
+
*
|
|
347
|
+
* Поэтому здесь вырезаются значения `--env-file` — и ТОЛЬКО в тех отрезках
|
|
348
|
+
* команды, которые начинаются с `docker`. Остаток проверяется тем же правилом:
|
|
349
|
+
* стоит рядом появиться `cat …`, `grep …` или второму отрезку с защищённым
|
|
350
|
+
* путём — запрет возвращается. `cat --env-file …` не спасается: это не отрезок
|
|
351
|
+
* докера.
|
|
352
|
+
*
|
|
353
|
+
* **Чего это не закрывает, честно.** `docker run --env-file X … sh -lc 'cat
|
|
354
|
+
* /proc/self/environ'` и `docker compose --env-file X config` секреты напечатают.
|
|
355
|
+
* Это принято сознательно, и вот почему: послабление живёт ТОЛЬКО в хуке, а
|
|
356
|
+
* политика (`commandMentionsSecretPath` у `evaluateToolUse`) остаётся прежней.
|
|
357
|
+
* Значит в обычных режимах такая команда по-прежнему отвергается, а хук — это
|
|
358
|
+
* единственный сторож ровно в режиме «Полный доступ», где агенту и так открыт
|
|
359
|
+
* инструмент `Read` на тот же самый файл: матчер хука закрывает только `Bash`
|
|
360
|
+
* (см. шапку `inspectSecretPaths`). Запрещать там, где рядом открыта дверь
|
|
361
|
+
* пошире, — не защита, а сломанная выкладка.
|
|
362
|
+
*/
|
|
363
|
+
function handsFileToDocker(command) {
|
|
364
|
+
const cleaned = command
|
|
365
|
+
.split(COMMAND_SEPARATORS)
|
|
366
|
+
.map((segment) => /^\s*(?:sudo\s+)?docker\b/.test(segment)
|
|
367
|
+
? segment.replace(DOCKER_ENV_FILE_FLAG, ' ')
|
|
368
|
+
: segment)
|
|
369
|
+
.join(' ; ');
|
|
370
|
+
return !commandMentionsSecretPath(cleaned);
|
|
371
|
+
}
|
|
330
372
|
function inspectSecretPaths(command) {
|
|
331
373
|
if (!commandMentionsSecretPath(command))
|
|
332
374
|
return { dangerous: false };
|
|
375
|
+
if (handsFileToDocker(command))
|
|
376
|
+
return { dangerous: false };
|
|
333
377
|
return {
|
|
334
378
|
dangerous: true,
|
|
335
379
|
reason: 'Blocked: this command touches a protected path — a machine login, a key, or an agent ' +
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const RUNNER_VERSION = "0.69.
|
|
1
|
+
export declare const RUNNER_VERSION = "0.69.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED