
Авторизованная исследовательская лаборатория безопасности, воспроизводящая CVE-2021-21423 (GHSA-gg2g-m5wc-vccq): pwn-запрос rebuild-bot в projen через issue_comment
Автоматизированный исследовательский артефакт — не вышестоящий проект.
Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это дословный снимок
projen/projenна коммите284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), перераспределённый под собственной лицензией этого проекта, файл которой включён без изменений в этот снимок.Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение — никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на те значения, которым они соответствовали на 2021-03-09; см.
pinning.mdв выводе системы для каждого изменения, внесённого в снимок.Вопросы или возражения: [email protected]
Определяйте и поддерживайте сложную конфигурацию проектов с помощью кода.
ПРИСОЕДИНЯЙТЕСЬ К ДВИЖЕНИЮ #TemplatesAreEvil!
projen синтезирует файлы конфигурации проекта, такие как package.json,
tsconfig.json, .gitignore, рабочие процессы GitHub, eslint, jest и т. д., из
хорошо типизированного определения, написанного на JavaScript.
Посмотрите этот доклад о projen.
В отличие от существующих инструментов шаблонизации/скаффолдинга, projen — это не разовый
генератор. Синтезированные файлы никогда не следует редактировать вручную (на самом деле projen
это обеспечивает). Чтобы изменить настройку проекта, пользователи взаимодействуют с богатыми
строго типизированными классами и выполняют projen для обновления файлов конфигурации проекта.
Чтобы создать новый проект, выполните следующую команду и следуйте инструкциям:```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Currently supported project types (use `npx projen new` without a type for a
list):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - AWS CDK app in TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - AWS CDK construct library project.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - CDK8s construct library project.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Java project.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Multi-language jsii library project.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Next.js project without TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Next.js project with TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Node.js project.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Base project.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Python project.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - React project without TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - React project with TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - TypeScript project.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - TypeScript app.
<!-- </macro> -->
> Use `npx projen new PROJECT-TYPE --help` to view a list of command line
> switches that allows you to specify most project options during bootstrapping.
> For example: `npx projen new jsii --author-name "Jerry Berry"`.
The `new` command will create a `.projenrc.js` file which looks like this for
`jsii` projects:```js
const { JsiiProject } = require('projen');
const project = new JsiiProject({
authorAddress: "[email protected]",
authorName: "Elad Ben-Israel",
name: "foobar",
repository: "https://github.com/eladn/foobar.git",
});
project.synth();
Эта программа создаёт экземпляр типа проекта с минимальной настройкой, а затем вызывает
synth() для синтеза файлов проекта. По умолчанию команда new также
выполняет эту программу, что приводит к полностью рабочему проекту.
После создания проекта вы можете настроить его, отредактировав
.projenrc.js и повторно запустив npx projen для повторного синтеза.
Файлы, сгенерированные projen, считаются «деталью реализации», и projen защищает их от ручного редактирования (большинство файлов помечены как доступные только для чтения, а в CI-сборке настроена проверка «анти-взлома» для обеспечения того, чтобы файлы не обновлялись во время сборки).
Например, чтобы настроить публикацию в PyPI для проектов jsii, вы можете использовать
python option:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Запуск:```shell
npx projen
И вы заметите, что ваш файл package.json теперь содержит раздел python в
его конфигурации jsii, а рабочий процесс GitHub release.yml включает шаг
публикации в PyPI.
Мы рекомендуем добавить это в ваш профиль оболочки, чтобы вы могли просто запускать pj каждый
раз, когда обновляете .projenrc.js:```bash
alias pj='npx projen'
Большинство проектов поддерживают команду `start`, которая отображает меню действий рабочего процесса:```shell
$ yarn start
? Scripts: (Use arrow keys)
BUILD
❯ compile Only compile
watch Watch & compile in the background
build Full release build (test+compile)
TEST
test Run tests
test:watch Run jest in watch mode
eslint Runs eslint against the codebase
...
Команда build — это та же команда, которая выполняется в ваших CI-сборках. Она
обычно компилирует, проверяет линтером, запускает тесты и упаковывает ваш модуль для распространения.
Вот несколько примеров функций, встроенных в типы проектов:
package.jsoncompile, build, test, package