
Laboratório autorizado de pesquisa em segurança reproduzindo CVE-2021-21423 (GHSA-gg2g-m5wc-vccq): solicitação pwn do projen rebuild-bot via issue_comment
Artefacto de pesquisa automatizado — não é o projeto original.
Este repositório é um laboratório descartável criado por um harness automatizado para uma dissertação de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um snapshot verbatim de
projen/projenno commit284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), redistribuído sob a licença do próprio projeto, cujo ficheiro está incluído inalterado neste snapshot.O projeto original não está envolvido, nunca é alvo, e a vulnerabilidade estudada aqui já é pública. Todos os segredos e variáveis neste repositório são valores fictícios gerados aleatoriamente — nenhuma credencial real está presente. Referências de ações e imagens de runners estão fixadas ao que resolviam em 2021-03-09; consulte
pinning.mdna saída do harness para todas as alterações feitas ao snapshot.Perguntas ou objeções: [email protected]
Defina e mantenha configurações complexas de projetos através de código.
JUNTE-SE AO MOVIMENTO #TemplatesAreEvil!
projen sintetiza ficheiros de configuração de projetos como package.json,
tsconfig.json, .gitignore, GitHub Workflows, eslint, jest, etc a partir de uma
definição bem tipada escrita em JavaScript.
Veja esta palestra sobre o projen.
Ao contrário das ferramentas existentes de templating/scaffolding, projen não é um gerador
de uso único. Os ficheiros sintetizados nunca devem ser editados manualmente (na verdade, o projen
impõe isso). Para modificar a configuração do seu projeto, os utilizadores interagem com classes
ricas e fortemente tipadas e executam projen para atualizar os seus ficheiros de configuração do projeto.
Para criar um novo projeto, execute o seguinte comando e siga as instruções:```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Atualmente, os tipos de projeto suportados (use `npx projen new` sem um tipo para ver uma
lista):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - Aplicativo AWS CDK em TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - Projeto de biblioteca de construct AWS CDK.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - Projeto de biblioteca de construct CDK8s.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Projeto Java.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Projeto de biblioteca jsii multilíngue.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Projeto Next.js sem TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Projeto Next.js com TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Projeto Node.js.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Projeto base.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Projeto Python.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - Projeto React sem TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - Projeto React com TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - Projeto TypeScript.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - Aplicativo TypeScript.
<!-- </macro> -->
> Use `npx projen new PROJECT-TYPE --help` para ver uma lista de opções de linha de
> comando que permitem especificar a maioria das opções do projeto durante o bootstrapping.
> Por exemplo: `npx projen new jsii --author-name "Jerry Berry"`.
O comando `new` criará um arquivo `.projenrc.js` que se parece com isto para
projetos `jsii`:```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();
Este programa instancia o tipo de projeto com uma configuração mínima e, em seguida, chama
synth() para sintetizar os arquivos do projeto. Por padrão, o comando new também
executará este programa, o que resultará em um projeto totalmente funcional.
Depois que seu projeto for criado, você pode configurá-lo editando
.projenrc.js e executando novamente npx projen para sintetizar de novo.
Os arquivos gerados pelo projen são considerados um "detalhe de implementação" e o projen os protege contra edição manual (a maioria dos arquivos é marcada como somente leitura, e uma verificação "anti-adulteração" é configurada no fluxo de trabalho de build do CI para garantir que os arquivos não sejam atualizados durante o build).
Por exemplo, para configurar a publicação no PyPI em projetos jsii, você pode usar
opção python:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Executar:```shell
npx projen
E notará que o seu ficheiro package.json agora contém uma secção python na
configuração jsii e o workflow release.yml do GitHub inclui um passo de
publicação no PyPI.
Recomendamos que coloque isto no seu perfil de shell, para que possa simplesmente executar pj sempre
que atualizar o .projenrc.js:```bash
alias pj='npx projen'
Most projects support a `start` command which displays a menu of workflow
activities:```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
...
O comando build é o mesmo comando que é executado nos seus builds de CI. Ele
normalmente compila, faz lint, testa e empacota o seu módulo para distribuição.
Alguns exemplos de funcionalidades integradas aos tipos de projeto: