Перейти до основного вмісту

Меню команд

Перейдіть на сторінку або пошукайте в каталозі

ШІ-інструменти та скрипти

Перевірка безпеки Dev Container

Перевірте devcontainer.json до того, як його хтось відкриє: привілейовані контейнери, команди на хості, що передають curl у bash, секрети в env, змонтовані ~/.ssh і ~/.aws, сокет Docker, незакріплені Features, користувачі root, відкриті порти та широкий доступ Codespaces.

$5.00

Що ви отримаєте: 1 файл · 36.44 KB · ZIP

Переглянути варіанти купівлі

Опис товару

"initializeCommand": "curl -fsSL https://... | bash" виконується не в контейнері: він запускається на вашій власній машині щоразу, коли будь-хто відкриває репозиторій у dev container. А монтування ${localEnv:HOME}/.ssh передає ваші приватні ключі кожному скрипту встановлення пакетів усередині контейнера. Цей навик знаходить такі проблеми та ще дванадцять ризиків dev container до того, як хтось відкриє теку, і підказує, як виправити кожну з них.

Ваш агент запускає сканер для .devcontainer/devcontainer.json, .devcontainer.json і конфігурацій окремих тек у .devcontainer/ (VS Code Dev Containers, GitHub Codespaces, devcontainer CLI). Він читає JSON із коментарями та кінцевими комами, знає змінні ${localEnv:NAME} і ${containerEnv:NAME}, рядкову, масивну та об'єктну форми команд життєвого циклу, рядки й об'єкти монтування, параметри docker run у runArgs, а також те, що runArgs, appPort і workspaceMount не застосовуються до конфігурацій Docker Compose, що числові значення appPort залишаються на localhost і що devcontainer-lock.json закріплює Features. Локальні паролі для розробки (postgres, devpass, rootpass), налаштування, що стосуються секрету (PASSWORD_HASHER), і заповнювачі (your-token, django-insecure-...) не вважаються секретами. Він ніколи не запускає docker, devcontainer CLI чи будь-які знайдені команди. Результат: BLOCK, REVIEW або NOT FLAGGED із зазначенням файлу, рядка, причини та безпечнішого підходу. Секрети ніколи не виводяться.

Що перевіряється

BLOCK (виправити до публікації)

  • D01: initializeCommand (виконується на хості), який завантажує скрипт і запускає його: curl | bash, bash <(curl ...), iwr | iex
  • D02: паролі, токени та ключі, записані в containerEnv, remoteEnv, аргументах збирання, runArgs -e, командах життєвого циклу (а також docker login -p, az login -p, sqlcmd -P і літерал, переданий через echo в docker login --password-stdin), значеннях за замовчуванням ${localEnv:NAME:default}, властивості secrets або будь-якому налаштуванні (імена секретів, паролі в URL, відомі формати токенів)
  • D03: ваша домашня тека, ~/.ssh, ~/.aws, облікові дані хмарних CLI та Docker, GnuPG, .npmrc, .netrc та інші файли з обліковими даними, коренева тека хоста або /etc, змонтовані в контейнер

REVIEW (перевірити до релізу)

  • D11: привілейовані контейнери ("privileged": true, --privileged у runArgs або Feature docker-in-docker, який вмикає цей режим)
  • D12: змонтований сокет Docker або Podman чи Feature docker-outside-of-docker, який його монтує
  • D13: onCreateCommand, postCreateCommand та інші команди налаштування, що передають завантажені дані в оболонку
  • D14: образи без тегу або з :latest, а також Features без версії, з :latest або задані URL-адресою архіву (якщо їх не закріплює devcontainer-lock.json)
  • D15: capabilities понад стандартні для Docker (сам лише SYS_PTRACE допустимий), пристрої хоста, а також вимкнені seccomp, AppArmor або SELinux (типове для налагоджувача поєднання SYS_PTRACE і seccomp=unconfined не позначається)
  • D16: простори імен хоста для мережі, PID, IPC, UTS, користувачів або cgroup
  • D17: remoteUser, containerUser або runArgs --user зі значенням root
  • D18: initializeCommand, що запускає програму або скрипт на хості (mkdir, touch, cp, docker pull і подібні прості кроки допустимі)
  • D19: ~/.kube, ~/.minikube, /proc, /sys, /dev, /var/lib/docker, /run, /boot або /lib/modules, змонтовані з хоста
  • D20: порти, опубліковані на всіх мережевих інтерфейсах (runArgs -p або -P, рядки appPort без 127.0.0.1)
  • D21: дозволи Codespaces на репозиторії з write-all, доступом на запис до owner/* або записом у workflows

Що входить до комплекту

  • Сканер (Python 3.9+, лише стандартна бібліотека)
  • Посібник із правил із причиною, безпечнішим підходом та офіційним джерелом для кожного правила
  • Ризикований і безпечний приклади проєктів (dev container для API та dev container з інструментами для кластера), а також реальний звіт сканера щодо ризикованого прикладу

Обмеження

Читаються лише файли devcontainer.json: Dockerfile, файли Docker Compose, зазначені в dockerComposeFile, скрипти встановлення Features, налаштування, які образи та Features додають через власні метадані (крім Docker Features з D11 і D12), і скрипти, що викликаються командами, не читаються. Команди зіставляються як текст, тому скрипт, завантажений у файл і запущений на наступному кроці, не позначається. Теги мажорних версій, як-от :1, вважаються закріпленими, хоча видавець може їх перемістити; точно закріплює Feature лише digest або devcontainer-lock.json. Привілейований режим і сокет Docker належать до REVIEW, а не BLOCK: обидва передають хост Docker коду в контейнері, але обидва є свідомими, задокументованими способами запуску Docker у dev container (їх використовують офіційні шаблони docker-in-docker і docker-outside-of-docker), тому привілейований режим отримує той самий рівень незалежно від того, прописаний він явно чи ввімкнений через Feature. Монтування всієї домашньої теки (приклад із документації VS Code) належить до BLOCK, бо кожен ключ у ній стає доступним для читання в контейнері. NOT FLAGGED не є гарантією.

Вміст

Один ZIP-файл з 11 файлами: SKILL.md, сканер у scripts/ (4 файли Python), references/rules.md (кожне правило з причиною та безпечнішим підходом) і examples/ (4 файли прикладів і report.md, реальний вивід сканера щодо ризикованого прикладу).

Як користуватися: це навик для агента: тека з файлом SKILL.md і скриптами Python, які може запускати ШІ-агент для програмування, наприклад Claude Code, Cursor або Codex CLI. Розпакуйте архів у теку навичок вашого агента (для Claude Code: ~/.claude/skills/), а потім попросіть агента перевірити ваш проєкт. Скрипти також працюють самостійно з Python 3.9 або новішим, нічого встановлювати не потрібно. Вони лише читають ваші файли: жодного доступу до мережі, нічого нікуди не надсилається.

Що ви отримаєте

1 файл · 36.44 KB

  • devcontainer-safety-check-1.0.0.zipZIP · 36.44 KB
ЛіцензіяКомерційне використання дозволено
Перевірка пакетаПройдено

Getly відкрив завантажені файли й не знайшов нічого, що завадило б їх відкрити. Це не антивірусна перевірка і не оцінка якості.

Опубліковано12 лист. 2026 р.
Розмір файлу36.44 KB
Формат файлуZIP
Версіяv1.0

Теги

devcontainercodespacesdockersecuritydevopsai agent skill
R
RR HH

Поширені запитання

Чи отримаю я доступ одразу?

Так. Це цифровий товар: ви можете завантажити його одразу після оплати, просто зі своєї бібліотеки.

Чи можна використовувати його в комерційних проєктах?

Так. Комерційне використання дозволено: користуйтеся в особистому бізнесі та в тому, що продаєте. Ви не можете перепродавати чи поширювати сам файл.

Яка у вас політика повернення коштів?

Ви можете запросити повернення коштів протягом 30 дн. Якщо щось не так, подайте запит зі свого замовлення, і команда Getly його розгляне.

Які формати та розміри файлів я отримаю?

Ви завантажите 1 файл - ZIP - загалом 36.44 KB.

Чи отримую я безкоштовні оновлення?

Так: коли продавець випускає нову версію, ви можете повторно завантажити свіжі файли зі своєї бібліотеки безкоштовно. Останні оновлення дивіться в журналі змін.

Ціна

$5.00