
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:
package.jsoncompile, build, test, packageVedi Riferimento API per i dettagli API.
Inoltre, diversi componenti e tipi di progetto di projen sono spiegati con esempi in /docs (attualmente un lavoro in corso!).
projen adotta un approccio "batterie incluse" e mira a offrire dozzine di diversi tipi di progetto
pronti all'uso (stiamo solo iniziando). Pensa a projen new react, projen new angular, projen new java-maven,
projen new awscdk-typescript, projen new cdk8s-python (nulla in projen è legato a javascript o npm)...
Aggiungere nuovi tipi di progetto è semplice come inviare una pull request a questo repository ed esportare una classe che
estende projen.Project (o uno dei suoi derivati). Projen scopre automaticamente i tipi di progetto, quindi il tuo
tipo sarà immediatamente disponibile in projen new.
projen è fornito con molti tipi di progetto pronti all'uso, ma può anche funzionare con tipi di progetto e componenti definiti in moduli jsii esterni (il motivo per cui abbiamo bisogno di jsii è che projen usa i metadati jsii per scoprire i tipi di progetto e le opzioni in projen new).
Supponiamo di avere un modulo in npm chiamato projen-vuejs che include un singolo tipo
di progetto per vue.js:```bash
$ npx projen new --from projen-vuejs
Se il modulo referenziato include più tipi di progetto, il tipo è obbligatorio.
Gli switch possono essere utilizzati anche per specificare valori iniziali basati sulle API
del tipo di progetto. Puoi anche utilizzare qualsiasi sintassi di pacchetto supportata da [yarn
add](https://classic.yarnpkg.com/en/docs/cli/add#toc-adding-dependencies) come
`[email protected]`, `file:/path/to/local/folder`,
`[email protected]/awesome/projen-vuejs#1.2.3`, ecc.```bash
$ npx projen new --from projen-vuejs@^2 vuejs-ts --description "my awesome vue project"
Sotto il cofano, projen new installerà il modulo projen-vuejs da npm
(versione 2.0.0 e successive), scoprirà i tipi di progetto in esso contenuti e avvierà il
tipo di progetto vuejs-ts. Assegnerà il valore "my awesome vue project" al
campo description. Se esamini il tuo file .projenrc.js, vedrai
che projen-vuejs è definito come dipendenza di sviluppo:```javascript
const { VueJsProject } = require('projen-vuejs');
const project = new VueJsProject({ name: 'my-vuejs-sample', description: "my awesome vue project", // ... devDeps: [ 'projen-vuejs' ] });
project.synth();
## Roadmap
Vedi [Vision](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/VISION.md).
## Contributi
Sono benvenuti contributi di ogni tipo! Consulta la nostra [guida per i
contributori](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CONTRIBUTING.md) e il nostro [codice di condotta](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CODE_OF_CONDUCT.md).
Per un avvio rapido, controlla un ambiente di sviluppo:```bash
$ git clone [email protected]:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
Grazie a queste fantastiche persone (chiave emoji):
Distribuito sotto licenza Apache-2.0.

![]() Ash 💻 |

![]() Joseph Egan 💻 |

![]() Jake Pearson 💻 |

![]() Thomas Klinger 💻 |