
Laboratorio di ricerca sulla sicurezza autorizzato che riproduce CVE-2021-21423 (GHSA-gg2g-m5wc-vccq): richiesta pwn di projen rebuild-bot tramite issue_comment
Artefatto di ricerca automatizzato — non è il progetto upstream.
Questo repository è un laboratorio usa e getta costruito da un sistema automatizzato per una tesi magistrale presso l'Université Laval sulla riproduzione di vulnerabilità pubblicate nei workflow di GitHub Actions. È uno snapshot integrale di
projen/projenal commit284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), ridistribuito sotto la licenza del progetto stesso, il cui file è incluso invariato in questo snapshot.Il progetto upstream non è coinvolto, non è mai preso di mira, e la vulnerabilità studiata qui è già pubblica. Ogni segreto e variabile in questo repository è un valore fittizio generato casualmente — nessuna credenziale reale è presente. I riferimenti alle Action e le immagini dei runner sono bloccati a ciò a cui risolvevano il 2021-03-09; consulta
pinning.mdnell'output del sistema per ogni modifica apportata allo snapshot.Domande o obiezioni: [email protected]
Definisci e mantieni configurazioni di progetto complesse tramite codice.
UNISCITI AL MOVIMENTO #TemplatesAreEvil!
projen sintetizza file di configurazione del progetto come package.json,
tsconfig.json, .gitignore, workflow di GitHub, eslint, jest, ecc. a partire da una
definizione ben tipizzata scritta in JavaScript.
Guarda questa presentazione su projen.
A differenza dei tradizionali strumenti di templating/scaffolding, projen non è un generatore
una tantum. I file sintetizzati non dovrebbero mai essere modificati manualmente (anzi, projen
lo impone). Per modificare la configurazione del progetto, gli utenti interagiscono con classi
ricche e fortemente tipizzate ed eseguono projen per aggiornare i file di configurazione del progetto.
Per creare un nuovo progetto, esegui il seguente comando e segui le istruzioni:```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Attualmente i tipi di progetto supportati (usa `npx projen new` senza un tipo per un
elenco):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - App AWS CDK in TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - Progetto di libreria di costrutti AWS CDK.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - Progetto di libreria di costrutti CDK8s.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Progetto Java.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Progetto di libreria jsii multilingua.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Progetto Next.js senza TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Progetto Next.js con TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Progetto Node.js.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Progetto base.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Progetto Python.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - Progetto React senza TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - Progetto React con TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - Progetto TypeScript.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - App TypeScript.
<!-- </macro> -->
> Usa `npx projen new PROJECT-TYPE --help` per visualizzare un elenco di opzioni
> da riga di comando che ti consentono di specificare la maggior parte delle opzioni del progetto durante il bootstrap.
> Ad esempio: `npx projen new jsii --author-name "Jerry Berry"`.
Il comando `new` creerà un file `.projenrc.js` che si presenta così per
i progetti `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();
Questo programma istanzia il tipo di progetto con una configurazione minima, e poi chiama
synth() per sintetizzare i file del progetto. Di default, il comando new eseguirà
anche questo programma, il che risulterà in un progetto completamente funzionante.
Una volta creato il tuo progetto, puoi configurarlo modificando
.projenrc.js e rieseguendo npx projen per sintetizzare di nuovo.
I file generati da projen sono considerati un "dettaglio implementativo" e projen li protegge dalla modifica manuale (la maggior parte dei file è contrassegnata come sola lettura, e un controllo "anti manomissione" è configurato nel workflow di build CI per garantire che i file non vengano aggiornati durante la build).
Ad esempio, per configurare la pubblicazione su PyPI nei progetti jsii, puoi usare
python option:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Esegui:```shell
npx projen
E noterai che il tuo file package.json ora contiene una sezione python nella
sua configurazione jsii e il workflow GitHub release.yml include un passaggio
di pubblicazione su PyPI.
Ti consigliamo di inserire questo nel tuo profilo di shell, così potrai semplicemente eseguire pj ogni
volta che aggiorni .projenrc.js:```bash
alias pj='npx projen'
La maggior parte dei progetti supporta un comando `start` che mostra un menu delle attività del flusso di lavoro:```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
...
Il comando build è lo stesso comando che viene eseguito nelle build CI. In genere
compila, esegue lint, test e impacchetta il modulo per la distribuzione.
Alcuni esempi di funzionalità integrate nei tipi di progetto: