The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

🐐 What is the Genalguacil Real World Lab & why are they launching a podcast?

This podcast was created with a threefold objective.

• To hear the stories of those who work in or for #rural communities.
• To reflect on the opportunities arising from innovation where #culture, territory, #climate and #social perspectives converge.
• To contribute to the research conducted as part of the #PACESETTERS project.

🎧 labgenalguacil.com/podcast/

@pacesetters@fed.dyne.org

reshared this

Ireland investigates Meta for breaching the DSA – a year on from our complaint


The Irish Digital Services Coordinator Coimisiún na Meán (CnaM) has announced a formal investigation last week into whether Meta breaches the DSA’s obligation to offer users access to alternative news feeds without profiling – a promising step towards tackling toxic platform design. The investigation comes after Bits of Freedom, EDRi, GFF and Convocation Design + Research filed a complaint about the issue. At the same time, Meta’s abuses have already gone on for too long. We need a fast resolution from the CnaM in order to protect the digital rights of people across Europe and to show that the EU stands ready to enforce its platform laws.

The post Ireland investigates Meta for breaching the DSA – a year on from our complaint appeared first on European Digital Rights (EDRi).

The Pirate Post ha ricondiviso questo.

A l'occasion de l'ouverture du festival de Cannes, plusieurs syndicats du monde de la culture (Sud Culture, CGT Culture, STUCS-CNTSO...) dénoncent le « criblage » effectué sur toutes les personnes voulant travailler sur cet évènement. Cette procédure consiste à fouiller le passé des personnes ayant un emploi ou une mission lors de ce qui est qualifié par l’État de « grand évènement ». Elle peut conduire à refuser l'accréditation à des personnes qui auraient des antécédents trop militants.

The Pirate Post reshared this.

in reply to La Quadrature du Net

Concrètement, les autorisations reposent sur des « enquêtes administratives de sécurité » qui interrogent un système dénommé « ACCReD ». Celui-ci interconnecte 14 fichiers très variés. Parmi eux, on retrouve le fichier tentaculaire de traitement des antécédents judiciaires (TAJ), qui contient près de 20 millions de fiches et des informations sur toute personne ayant eu affaire à la police, ainsi que de nombreux fichiers de renseignement politique, comme le PASP et le GIPASP.
in reply to La Quadrature du Net

À partir de là, peut être délivré un avis défavorable si « le comportement ou les agissements de la personne sont de nature à porter atteinte à la sécurité des personnes, à la sécurité publique ou à la sûreté de l'État ». Mais les critères sont flous et l'avis non communiqué. L'année dernière, une des travailleuses du Festival s'est ainsi vu refuser son accréditation en raison de son engagement pour des causes écologistes. reporterre.net/Festival-de-Can…
in reply to La Quadrature du Net

En réponse, les syndicats ont créé un site internet et un guide visant à informer les personnes sur ce système de criblage et à expliquer quels sont leurs droits en cas de refus d'accréditation et comment agir. Ce guide très complet est à retrouver sur info-criblage.org/
in reply to La Quadrature du Net

Il s'agit exactement du même phénomène que celui que nous mettions en lumière lors des Jeux olympiques de 2024 où de nombreuses personnes avaient été écartées en raison de leur passé politique et n'avaient pas pu travailler sur l'évènement.
laquadrature.net/2024/07/30/je…
in reply to La Quadrature du Net

Cette discrimination est rendue possible par l'appétit insatiable de l’État en matière de fichage. Celui-ci dispose désormais de millions d'informations sur la population, lui permettant de faire ce type d'enquête et de criminaliser l'activisme dans des sphères de plus en plus nombreuses de la société. Cela est ainsi également le cas dans les universités où des chercheur·ses se voient refuser des accès en raison de leurs engagements politiques.
mediapart.fr/journal/france/16…

Disreputable_Craftsman reshared this.

in reply to La Quadrature du Net

L'initiative des syndicats de travailleur·ses du spectacle et de la culture est donc plus que bienvenue ! Ensemble, il faut s'organiser contre le fichage d’État et s'outiller contre ces discriminations. Retrouvez leur initiative sur info-criblage.org/
in reply to La Quadrature du Net

#PrivacidadeCotiá #criba #criblage

Contra "a criba".

Persoas traballadoras do festival de Cannes rexeitadas tras investigación policial preventiva: "a criba".

Sindicatos crean manual de resistencia:
- afíliate
- vai acompañada
- pide escrito co motivo do rexeitamento
- recorre: a criba vai contra o teu dereito ao traballo

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Microsoft Patch Tuesday May 2026: 120 Vulnerabilities Fixed, Including 29 Critical RCE Flaws
#CyberSecurity
securebulletin.com/microsoft-p…
The Pirate Post ha ricondiviso questo.

The edge of the internet is closer than you think.

What if your community could exist without phone numbers, email addresses, or third-party websites? What if all it took was a sovereign identity and a local area network?

We have a working blueprint for digital autonomy, from local bars to neighborhood groups to small businesses. It runs on scarce resources, costs almost nothing, and leaves no one trapped. The escape hatch is always open.

Come see how we did it.

🔗 news.dyne.org/the-edge-of-the-…

reshared this

The Pirate Post ha ricondiviso questo.

⚠️ EU e UK trattano con gli USA per la condivisione dei dati biometrici⚠️

Non è chiaro cosa stia negoziando il Consiglio dell'Unione Europea (=la rappresentanza dei governi nazionali), perché i negoziati sono avvolti nel mistero; ma una bozza dell'accordo è giunta a Statewatch e "implicherebbe trasferimenti reciproci continui e sistematici di dati biometrici", tra cui impronte digitali, fotografie e dati genetici.

computerweekly.com/news/366643…

@privacypride@feddit.it

reshared this

Bastian’s Night #476 May, 14th


Every Thursday of the week, Bastian’s Night is broadcast from 21:30 CEST/DST.

Bastian’s Night is a live talk show in German with lots of music, a weekly round-up of news from around the world, and a glimpse into the host’s crazy week in the pirate movement.


If you want to read more about @BastianBB: –> This way


piratesonair.net/bastians-nigh…

The Pirate Post ha ricondiviso questo.

Il monitoraggio delle intrusioni su Android come nuova fonte di dati per l'analisi forense consensuale


Google ha annunciato oggi il lancio di una nuova funzionalità di "Registrazione delle intrusioni Android" nell'ambito della Modalità di protezione avanzata di Android (AAPM). Questa nuova funzionalità promette di essere un valido supporto per i ricercatori di informatica forense impegnati in indagini su attacchi sofisticati ai dispositivi Android. È la prima volta che un importante produttore di dispositivi rilascia una funzionalità specificamente progettata per migliorare la capacità di rilevare e contrastare, a livello forense, le minacce digitali avanzate.

securitylab.amnesty.org/latest…

@informatica

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Azure Resource Manager MCP Server: gestire l’infrastruttura Azure con gli agenti AI
#tech
spcnet.it/azure-resource-manag…
@informatica


Azure Resource Manager MCP Server: gestire l’infrastruttura Azure con gli agenti AI


Azure Resource Manager: il piano di controllo di Azure


Azure Resource Manager (ARM) è il piano di controllo dell’intera piattaforma Azure. Ogni operazione che crea, aggiorna o elimina risorse Azure passa attraverso ARM, indipendentemente da dove provenga: portale Azure, CLI, PowerShell, REST API o SDK. È l’unico punto di ingresso autorevole per gestire l’infrastruttura cloud Microsoft.

Con l’esplosione degli agenti AI, si pone una domanda concreta: come possono questi agenti interagire con ARM in modo strutturato, sicuro e coerente? Microsoft ha risposto con l’Azure Resource Manager MCP Server, ora in anteprima pubblica: un server MCP remoto che fornisce agli agenti AI un accesso di prima classe alle operazioni di infrastruttura Azure attraverso il Model Context Protocol.

Cos’è l’Azure Resource Manager MCP Server


Il server MCP per ARM è progettato per essere il layer di accesso degli agenti AI all’infrastruttura Azure, esattamente come lo è per qualsiasi altro client ARM. Nella versione attuale espone due macro-funzionalità principali:

  • Azure Resource Graph (ARG) query: generazione, validazione ed esecuzione di query ARG in linguaggio naturale contro tutti i tipi di risorse Azure
  • ARM Template Deployment: avvio, monitoraggio e cancellazione di deployment ARM su scope di resource group esistenti

In pratica, l’agente AI non esegue direttamente SQL o chiamate REST: descrive ciò che vuole sapere o fare, e il server MCP traduce quella richiesta in operazioni ARM concrete e sicure.

I tool disponibili


Il server espone sei tool principali, ciascuno con un ruolo preciso:

  • generate_query: genera una query ARG a partire da un prompt in linguaggio naturale. Esempio: “Mostrami tutte le VM in esecuzione nel subscription X” → query KQL valida
  • validate_query: verifica che una query ARG sia corretta sintatticamente e sicura prima di eseguirla
  • execute_query: esegue la query ARG contro l’ambiente Azure dell’utente e restituisce i risultati
  • create_template_deployment: avvia il deployment di un ARM template verso un resource group target
  • get_arm_template_deployment_status: monitora lo stato di avanzamento di un deployment ARM
  • cancel_arm_template_deployment: annulla un deployment in corso (utile dopo fallimenti di validazione o policy)


Caso d’uso pratico: interrogare l’infrastruttura in linguaggio naturale


Immagina di voler sapere quante storage account nel tuo tenant non hanno il tag “owner” assegnato. Tradizionalmente dovresti conoscere il linguaggio KQL di Azure Resource Graph e costruire manualmente la query:

Resources
| where type == "microsoft.storage/storageaccounts"
| where isnull(tags["owner"]) or tags["owner"] == ""
| summarize count() by subscriptionId

Con l’ARM MCP Server attivo in GitHub Copilot Chat su VS Code, puoi semplicemente scrivere:
“Conta tutte le storage account senza il tag ‘owner’, raggruppate per subscription”


Il server generate_query crea la query KQL, validate_query la verifica, e execute_query la esegue restituendo i risultati all’agente che li presenta in formato leggibile.

Caso d’uso: deployment di infrastruttura guidato dall’AI


Il secondo use case riguarda il deployment di ARM template. Un agente può ricevere istruzioni come:

“Deploy un’app service con piano B1 nel resource group ‘prod-rg’ in West Europe, usa il template standard dalla nostra libreria”


Il tool create_template_deployment avvia il deployment specificando subscription ID, resource group, nome del deployment e la definizione del template ARM. Il tool get_arm_template_deployment_status permette all’agente di monitorarne l’avanzamento. Se qualcosa va storto, cancel_arm_template_deployment lo interrompe immediatamente.

Governance e sicurezza


Un aspetto critico: il server ARM MCP opera nel contesto dell’utente autenticato in VS Code. Tutte le chiamate vengono eseguite per conto di quell’utente e sono soggette agli stessi permessi e controlli di accesso definiti in Azure. Non ci sono privilegi elevati o bypass del modello di sicurezza Azure: se l’utente non ha i diritti per deployare in un certo resource group, l’agente non li avrà neanche.

Per organizzazioni che vogliono impedire completamente i deployment tramite ARM MCP Server, è possibile applicare una Azure Policy che blocchi esplicitamente le richieste al tool create_template_deployment identificando l’AppID del server MCP (22bfbae3-f4e7-485f-be43-8cee15065084) nel scope desiderato. Un template di policy di esempio è disponibile nel repository GitHub ufficiale.

Installazione e configurazione


Durante questa preview pubblica, il server ARM MCP è supportato su:

  • GitHub Copilot Chat in VS Code
  • GitHub Copilot CLI

Per installarlo:

  1. Apri aka.ms/JoinARMMCP — VS Code si avvierà automaticamente
  2. Quando richiesto in VS Code, clicca su Install sotto “Azure Resource Manager MCP server”
  3. Effettua il login con le credenziali Azure
  4. In VS Code, apri View > Chat e clicca sull’icona Configure Tools
  5. Assicurati che “Azure Resource Manager MCP server” sia spuntato

I prerequisiti sono VS Code installato, un account Azure valido e un account GitHub Copilot.

Considerazioni per gli amministratori Azure


L’ARM MCP Server apre nuovi scenari per i team DevOps e gli amministratori Azure. Alcuni esempi concreti:

  • Compliance automatizzata: agenti che controllano periodicamente le risorse e verificano l’applicazione di policy di tagging, naming convention o configurazioni di sicurezza
  • Troubleshooting accelerato: interrogare in linguaggio naturale lo stato dell’infrastruttura durante un incident, senza dover ricordare sintassi KQL
  • Infrastructure as Code assistita: generare e deployare ARM template partendo da descrizioni in linguaggio naturale, con validazione integrata prima dell’esecuzione

Il limite attuale — solo VS Code e GitHub Copilot CLI come client supportati — sarà probabilmente espanso nelle prossime versioni in base al feedback degli utenti. Microsoft ha aperto un canale dedicato su GitHub per raccogliere segnalazioni e richieste di funzionalità.

Conclusione


L’Azure Resource Manager MCP Server rappresenta un passo significativo nell’integrazione tra agenti AI e infrastruttura cloud. Non si tratta di uno strumento che bypassa la governance Azure, bensì di un layer che la rende accessibile agli agenti rispettandola appieno. Per team che già usano Azure e GitHub Copilot, il valore pratico è immediato: meno sintassi KQL da memorizzare, deployment più veloci da validare, e la possibilità di costruire agenti personalizzati per automazioni di compliance che oggi richiedono script dedicati.

Il server è ora in anteprima pubblica e può essere installato seguendo le istruzioni ufficiali su aka.ms/JoinARMMCP.

Fonti:
Introducing the Azure Resource Manager MCP Server! — Microsoft Tech Community (Steven Bucher, 8 maggio 2026)
Azure/Azure-Resource-Manager-MCP — GitHub


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

.NET Aspire 13.3: tutte le novità della release
#tech
spcnet.it/net-aspire-13-3-tutt…
@informatica


.NET Aspire 13.3: tutte le novità della release


.NET Aspire 13.3 è disponibile, e nonostante siano passate soltanto cinque settimane dalla versione 13.2, questa release porta con sé novità di rilievo: un nuovo skill per l’onboarding assistito da agente, risultati strutturati dai comandi delle risorse, log del browser direttamente nell’orchestratore, e — finalmente — supporto di prima classe a Kubernetes e AKS tramite Helm.

In questo articolo analizziamo le funzionalità più importanti di Aspire 13.3, con esempi pratici per i team che già usano Aspire in produzione o che vogliono iniziare.

Aspireify: onboarding assistito da agente


Una delle novità più interessanti di Aspire 13.3 è il nuovo skill Aspireify, pensato per semplificare l’integrazione di applicazioni esistenti in Aspire. Chi ha già seguito le sessioni AspiriFridays sa bene quanto possa essere laborioso il processo di “aspirificazione”: capire quali servizi sono presenti, quali porte usano, quali variabili d’ambiente sono dipendenze reali e come mappare i servizi Docker Compose verso le integrazioni Aspire native.

Il nuovo skill risolve esattamente questo problema. Quando aspire init crea lo scheletro dell’AppHost in un’applicazione esistente, Aspireify guida l’agente di coding attraverso un workflow strutturato per completare il lavoro:

  • Ispeziona il repository e comprende come l’applicazione è già strutturata
  • Mappa le configurazioni esistenti (es. DATABASE_URL) usando WithEnvironment() invece di riscrivere la configurazione
  • Preserva le porte hardcoded quando necessario, chiedendo all’utente nei casi ambigui
  • Se esiste già un Docker Compose, lo analizza prima di aggiungere nuove risorse

Il principio guida è chiaro: minimizzare le modifiche al codice esistente. L’agente si adatta all’applicazione, non viceversa.

Risultati strutturati dai comandi delle risorse


In Aspire 13.3, i comandi delle risorse possono restituire risultati strutturati al chiamante. Testo e JSON ora fluiscono attraverso il modello, gRPC, backchannel, UI del dashboard, CLI e strumenti MCP.

Questo significa che i comandi possono restituire risposte in markdown formattato — non solo “sì, è andato a buon fine”. Il dashboard integra tutto questo con un nuovo notification center nell’header, dove i risultati dell’esecuzione appaiono come notifiche con timestamp, rendering markdown e un’azione “View response” per l’output completo.

Tra le novità specifiche:

  • I comandi HTTP possono restituire il corpo della risposta, esposto via CLI, dashboard e SDK poliglotti generati
  • Il comando di rebuild delle risorse restituisce l’output del build come dati di testo strutturati, leggibili da strumenti e agenti senza dover fare scraping dei log
  • Le integrazioni di terze parti possono aggiungere comandi che restituiscono risultati significativi invece di cambiare solo stato in background


Browser logs: Aspire vede anche il frontend


La nuova API WithBrowserLogs() collega una risorsa browser tracciata a qualsiasi risorsa con un endpoint. Aspire avvia Chromium usando una pipe CDP privata (invece di un endpoint TCP debug esposto), poi trasmette log della console, richieste di rete ed errori nel log stream della risorsa:

// C# AppHost
var frontend = builder.AddViteApp("frontend", "../frontend")
    .WithHttpEndpoint(port: 3000)
    .WithBrowserLogs();

// TypeScript AppHost
const frontend = await builder.addViteApp("frontend", "../frontend")
    .withHttpEndpoint({ port: 3000 })
    .withBrowserLogs();

La funzionalità è disponibile tramite il nuovo pacchetto prerelease Aspire.Hosting.Browsers. Un comando del dashboard permette di configurare scope, browser e modalità user data a runtime, mentre un comando screenshot salva PNG come artefatti locali durevoli.

Dal punto di vista degli agent workflow, questo è particolarmente potente: l’agente può eseguire l’app, ispezionare i log del browser, catturare cosa è cambiato, correggere il codice, riavviare la risorsa e continuare — senza che lo sviluppatore debba incollare screenshot nella chat.

TypeScript, Python e Java AppHost verso la GA


Aspire 13.2 aveva introdotto l’authoring TypeScript AppHost. In 13.3, il lavoro continua su tutte e tre le piattaforme:

  • TypeScript, Python e Java AppHost espongono ora il set completo di extension method di Aspire.Hosting
  • Le API sono state rese più idiomatiche per ogni linguaggio: metodi come addProject, withEnvironment e withReference sono consolidati per leggere naturalmente
  • Python si aggiunge come nuovo generatore di codice AppHost
  • Java AppHost ora supporta union, optional/nullability, callback e un nuovo template “Empty (Java AppHost)”
  • Il nuovo diagnostico ASPIREEXPORT013 individua ID di capability duplicati a compile time


Kubernetes e AKS: finalmente supporto di prima classe


La novità più attesa della release è senza dubbio il supporto Kubernetes come deployment target di prima classe. Aspire aveva già un’ottima storia per Azure Container Apps e Docker Compose; ora Kubernetes entra nel club.

Il nuovo pacchetto Aspire.Hosting.Azure.Kubernetes aggiunge AddAzureKubernetesEnvironment(), con cui è possibile definire cluster AKS, node pool, tier SKU, cluster privati e Azure Container Insights direttamente dall’AppHost:

// C# AppHost
var aks = builder.AddAzureKubernetesEnvironment("prod-aks")
    .WithHelm();

builder.AddCSharpApp("api", "../api")
    .PublishTo(aks);

// TypeScript AppHost
const aks = await builder.addAzureKubernetesEnvironment("prod-aks")
    .withHelm();

await builder.addCsharpApp("api", "../api")
    .publishTo(aks);

aspire deploy usa Helm sotto il cofano, e il nome del namespace e della release sono configurabili con WithHelm(). Sono disponibili anche routing dichiarativo Ingress e Gateway API con AddIngress() e AddGateway(), inclusa configurazione di route, TLS, hostname e class. Per il teardown, aspire destroy esegue helm uninstall automaticamente — niente più script di pulizia manuali in un README.

Altre novità rilevanti


Aspire 13.3 include molte altre migliorie degne di nota:

  • EF Core migration management: sei comandi (Update Database, Drop Database, Reset Database, Add Migration, Remove Migration, Get Database Status) accessibili da dashboard e CLI, con esecuzione automatica all’avvio dell’AppHost in sviluppo locale
  • Azure networking: Azure Front Door, Network Security Perimeters, endpoint privati per Azure OpenAI e Foundry, ACR privato, e upgrade HTTPS automatici per App Service
  • JavaScript publishing: tre nuovi modelli di pubblicazione — PublishAsStaticWebsite(), PublishAsNodeServer() e PublishAsNpmScript() — con integrazione dedicata AddNextJsApp()
  • CLI: rilevamento automatico di Bun, Yarn e pnpm da lockfile; aspire dashboard standalone senza AppHost; aspire docs api per sfogliare la reference API dal terminale
  • Estensione VS Code: CodeLens e gutter icon nei file AppHost, Simple Browser integrato per il dashboard, workspace auto-restore
  • Docker Compose: supporto Podman tramite rilevamento automatico del runtime


Breaking changes da conoscere prima dell’aggiornamento


Prima di aggiornare, è importante verificare la sezione dei breaking changes ufficiale se si usano:

  • Startup hook Kubernetes/Docker Compose/AKS
  • Endpoint di gestione degli emulator
  • Il server MCP del dashboard
  • Il template starter Python
  • Output name di Azure network


Come aggiornare


Se si usa già Aspire, l’aggiornamento è semplice:

aspire update --self

Per chi parte da zero:
aspire init

oppure visitare get.aspire.dev per installare la CLI.

Conclusione


Aspire 13.3 consolida la piattaforma su tutti i fronti: l’onboarding diventa più semplice grazie ad Aspireify, l’osservabilità raggiunge il browser con WithBrowserLogs(), il supporto multi-linguaggio avanza verso la GA, e Kubernetes entra ufficialmente come target di deployment. Per i team .NET che operano su Kubernetes o AKS, questa è probabilmente la release più attesa degli ultimi mesi.

Fonte: What’s New in Aspire 13.3 — Maddy Montaquila, Microsoft Aspire Blog (7 maggio 2026)


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

MCP Server con Node.js: da un sistema di note su file a MySQL
#tech
spcnet.it/mcp-server-con-node-…
@informatica


MCP Server con Node.js: da un sistema di note su file a MySQL


Cos’è il Model Context Protocol e perché interessa ai developer Node.js


I modelli di linguaggio sono bravi a ragionare e conversare, ma da soli non possono eseguire operazioni reali sui tuoi sistemi. Possono suggerire query SQL o chiamate API, ma non possono farle girare concretamente. Il Model Context Protocol (MCP) risolve questo limite: fornisce ai modelli AI un modo strutturato per interagire con i tuoi strumenti, dai database ai file, fino alle API esterne. Invece di generare testo su ciò che dovrebbe accadere, il modello può invocare funzioni che lo fanno davvero accadere.

In pratica, questo apre la strada a strumenti come chatbot che creano e cercano voci nel database, assistenti AI che interrogano tool interni o attivano workflow, e agenti che leggono file, eseguono comandi e restituiscono risultati reali.

In questo tutorial imparerai a costruire il tuo primo MCP server da zero con Node.js e TypeScript: partiremo da un sistema di note basato su file per capire i concetti fondamentali, poi passeremo a un backend MySQL per mostrare come un LLM possa guidare operazioni deterministiche. Entro la fine avrai un server MCP funzionante pronto per essere collegato al client AI che preferisci.

Come funziona MCP


MCP segue un modello client-server: l’applicazione AI fa da client, il tuo codice gira come server. In una configurazione tipica, il client (Claude Desktop, Claude Code, Cursor, ecc.) si interpone tra l’utente e il tuo server, inoltrandogli le richieste e restituendogli i risultati. Il modello stesso non chiama mai direttamente il tuo server: quando l’utente manda un messaggio, il client condivide col modello la lista dei tool esposti dal tuo server. Il modello decide quale tool chiamare (e con quali argomenti), il client esegue la chiamata e rimanda il risultato al modello.

Utente → Client MCP → Modello AI → Tool selezionato → Server MCP → Risposta

Prerequisiti


Per seguire questo tutorial ti serviranno:

  • Node.js 18+
  • Familiarità di base con TypeScript
  • Un client compatibile con MCP per il test (Claude Desktop, Claude Code, Cursor, ecc.)
  • MySQL installato localmente (solo per la sezione avanzata con database)


Costruire il server MCP: sistema di note su file


Iniziamo creando un nuovo progetto Node.js. Questo sarà un sistema di note basato su file, utile per comprendere i concetti prima di introdurre un database.

mkdir mcp-notes && cd mcp-notes
npm init -y

Installa le dipendenze necessarie: l’SDK MCP per costruire il server, Zod per la validazione degli input e TypeScript per la type safety:
npm install @modelcontextprotocol/sdk zod
npm install -D typescript @types/node

Apri il package.json e aggiungi "type": "module" (l’SDK MCP usa i moduli ES) e gli script di build e start:
{
  "type": "module",
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js"
  }
}

Crea un file tsconfig.json nella root del progetto:
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "moduleResolution": "Node16",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"]
}

Scrivere il server


Crea il file src/index.ts con il codice base del server:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import fs from "fs/promises";
import path from "path";
import { z } from "zod";

const NOTES_DIR = path.join(process.cwd(), "notes");
await fs.mkdir(NOTES_DIR, { recursive: true });

const server = new McpServer({
  name: "mcp-notes",
  version: "1.0.0",
});

// I tool verranno aggiunti qui

const transport = new StdioServerTransport();
await server.connect(transport);

Questo è un MCP server completo e funzionante: crea la directory delle note, inizializza il server e lo connette tramite stdio per comunicare con un client MCP.

Aggiungere i tool


Ogni tool definisce una singola azione che il modello può compiere. Include nome, descrizione, schema di input e una funzione handler. Aggiungiamo i tre tool fondamentali: creazione, lettura e lista delle note.

server.tool(
  "create_note",
  "Create a new note with a given title and content",
  {
    title: z.string().min(1).describe("The note title"),
    content: z.string().min(1).describe("The body of the note"),
  },
  async ({ title, content }) => {
    const filename = `${title.replace(/[^a-z0-9_-]/gi, "_")}.txt`;
    const filepath = path.join(NOTES_DIR, filename);
    try {
      await fs.access(filepath);
      return {
        content: [{ type: "text", text: `Error: note "${title}" already exists.` }],
        isError: true,
      };
    } catch {}
    await fs.writeFile(filepath, content, "utf-8");
    return { content: [{ type: "text", text: `Note "${title}" created.` }] };
  }
);

server.tool(
  "read_note",
  "Read the content of a note by its title",
  { title: z.string().min(1).describe("The title of the note to read") },
  async ({ title }) => {
    const filename = `${title.replace(/[^a-z0-9_-]/gi, "_")}.txt`;
    try {
      const content = await fs.readFile(path.join(NOTES_DIR, filename), "utf-8");
      return { content: [{ type: "text", text: content }] };
    } catch {
      return {
        content: [{ type: "text", text: `Error: note "${title}" not found.` }],
        isError: true,
      };
    }
  }
);

server.tool(
  "list_notes",
  "List all available notes",
  {},
  async () => {
    const files = await fs.readdir(NOTES_DIR);
    const notes = files.filter(f => f.endsWith(".txt")).map(f => f.replace(".txt", ""));
    if (notes.length === 0) return { content: [{ type: "text", text: "No notes found." }] };
    return { content: [{ type: "text", text: notes.join("\n") }] };
  }
);

Testare il server con Claude Desktop


Compila il progetto con npm run build. Poi apri il file di configurazione di Claude Desktop:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Aggiungi il server sotto la chiave mcpServers:

{
  "mcpServers": {
    "mcp-notes": {
      "command": "node",
      "args": ["/percorso/del/progetto/mcp-notes/dist/index.js"],
      "cwd": "/percorso/del/progetto/mcp-notes"
    }
  }
}

Riavvia Claude Desktop e prova con prompt come: “Crea una nota chiamata standup con gli aggiornamenti di oggi” oppure “Elenca tutte le mie note”.

Passare a MySQL: dati strutturati per uso reale


Il sistema basato su file funziona bene per comprendere i fondamentali, ma ha limiti evidenti. Passare a MySQL mette in luce un pattern importante nel design MCP: il modello decide quale azione intraprendere, ma il tuo codice rimane responsabile di come quella azione viene eseguita. Quando il modello chiama search_notes, non genera né esegue SQL da solo: il tuo handler gestisce l’operazione in modo controllato, con query parametrizzate.

Installa il driver MySQL:

npm install mysql2

Crea il database e la tabella:
CREATE DATABASE mcp_notes;
USE mcp_notes;
CREATE TABLE notes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255) UNIQUE NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

La versione MySQL del tool create_note inserisce una riga invece di scrivere un file e gestisce i duplicati intercettando l’errore ER_DUP_ENTRY. La versione di search_notes permette ricerche full-text su titoli e contenuti — una funzionalità che con i file richiederebbe un codice molto più complesso.
server.tool(
  "search_notes",
  "Search notes by keyword across titles and content",
  { query: z.string().min(1).describe("Keyword or phrase to search for") },
  async ({ query }) => {
    const like = `%${query}%`;
    const [rows] = await pool.execute<mysql.RowDataPacket[]>(
      "SELECT title, created_at FROM notes WHERE title LIKE ? OR content LIKE ? ORDER BY created_at DESC",
      [like, like]
    );
    if (rows.length === 0) {
      return { content: [{ type: "text", text: `No notes found matching "${query}".` }] };
    }
    return { content: [{ type: "text", text: rows.map(r => `- ${r.title} (${r.created_at})`).join("\n") }] };
  }
);

Principi per progettare buoni tool MCP


Un tool MCP che funziona in fase di test può fallire in produzione se il modello fraintende quando o come usarlo. Alcune regole pratiche:

  • Descrizioni esplicite: frasi come “Gestisce le note” sono troppo vaghe. Usa descrizioni che spiegano chiaramente cosa fa il tool e quando va usato.
  • Singola responsabilità: ogni tool deve fare una sola cosa. Strumenti troppo “jolly” costringono il modello a indovinare l’intento.
  • Errori azionabili: usa isError: true con messaggi che guidano il modello su come riprovare: "Note non trovata. Usa list_notes per vedere quelle disponibili."
  • Boundary sicuri: mai interpolazione diretta dell’input utente in SQL o comandi shell. Usa sempre query parametrizzate.


Conclusione


Costruire un MCP server con Node.js e TypeScript è sorprendentemente accessibile grazie all’SDK ufficiale. Il pattern che hai imparato in questo tutorial — definire tool con schema Zod, gestire gli errori con isError e connettere il server via stdio — si scala facilmente a scenari più complessi: integrazione di API REST, automazione di workflow, connessione di agenti AI a sistemi legacy.

Il codice completo del tutorial è disponibile su GitHub.

Fonte: How to build your first MCP server with Node.js — LogRocket Blog (Elijah Asaolu, 5 maggio 2026)


The Pirate Post ha ricondiviso questo.

Ursula von der Leyen kommt ihren eigenen Fachleuten zuvor und pocht auf ein Social-Media-Verbot mit Alterskontrollen:

"Es ist meine Überzeugung"

Die dazu gehörige Rede ist beachtlich: Emotionen statt Fakten; Lücken in der Argumentation. 😵‍💫

Lest hier meine Analyse für @netzpolitik_feed

netzpolitik.org/2026/es-ist-me…

The Pirate Post ha ricondiviso questo.

Bevor sich ihre Jugendschutz-Expert*innen dazu äußern können, fordert Ursula von der Leyen ein Social-Media-Verbot für Minderjährige plus Alterskontrollen. @sebmeineck analysiert: Die Kommissionspräsidentin folgt dem Playbook der australischen Regierung.

netzpolitik.org/2026/es-ist-me…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Il primo zero-day costruito con l’AI: Google sventava un attacco di massa con exploit generato da LLM
#CyberSecurity
insicurezzadigitale.com/il-pri…


Il primo zero-day costruito con l’AI: Google sventava un attacco di massa con exploit generato da LLM


Si parla di:
Toggle

Per la prima volta nella storia documentata della cybersecurity, un gruppo criminale ha utilizzato un modello di intelligenza artificiale per identificare una vulnerabilità zero-day sconosciuta e trasformarla in un exploit funzionante, pianificando di impiegarla in un evento di compromissione di massa. Google Threat Intelligence Group (GTIG) ha svelato la scoperta l’11 maggio 2026, descrivendo quella che potrebbe essere un punto di svolta nell’evoluzione delle capacità offensive dei threat actor.

La scoperta: un exploit scritto da un LLM


Il team GTIG di Google ha identificato uno script Python contenente un exploit per una vulnerabilità zero-day in un popolare strumento open source di amministrazione web. La falla, un bypass dell’autenticazione a due fattori (2FA), permetteva a un attaccante in possesso di credenziali valide di aggirare completamente il secondo fattore di autenticazione, aprendo la strada a un accesso non autorizzato su larga scala.

Ciò che ha immediatamente attirato l’attenzione degli analisti non era tanto la vulnerabilità in sé, quanto le caratteristiche stilistiche e strutturali del codice che la implementava. Lo script presentava una serie di indizi inequivocabili della sua origine artificiale:

  • Docstring educativi estremamente dettagliati: ogni funzione era accompagnata da commenti esplicativi esaustivi, in uno stile tipico degli output di Large Language Model addestrati su repository di codice open source e documentazione tecnica.
  • Un punteggio CVSS “allucinato”: lo script includeva una valutazione CVSS autogenerata ma non corrispondente a nessuna voce esistente nel National Vulnerability Database — un errore tipico di un modello che genera informazioni plausibili ma non verificate.
  • Formato Pythonic “da manuale”: la struttura pulita, la classe _C per i colori ANSI, i menu di aiuto dettagliati e la coerenza stilistica riflettono il pattern caratteristico degli output di modelli come GPT-4 o Gemini quando invitati a scrivere strumenti di sicurezza.

GTIG ha valutato con alta confidenza che un modello di AI sia stato utilizzato sia per scoprire la vulnerabilità che per costruire l’exploit, pur non avendo prove che il modello specifico impiegato fosse Gemini di Google.

La natura della vulnerabilità: logica semantica, non memoria


Uno degli aspetti più rilevanti della scoperta riguarda la tipologia della vulnerabilità stessa. Non si trattava di un classico bug di memory corruption (buffer overflow, use-after-free) né di un problema di input sanitization — le categorie che i fuzzer tradizionali e gli strumenti SAST (Static Application Security Testing) sono progettati per individuare.

La falla era invece un difetto logico semantico ad alto livello: un’assunzione di trust codificata nella logica di enforcement del 2FA, che permetteva a un flusso di autenticazione specifico di saltare la verifica del secondo fattore. Questo tipo di vulnerabilità richiede una comprensione profonda della logica applicativa e dei suoi presupposti impliciti — un dominio in cui i modelli di linguaggio di grandi dimensioni, addestrati su enormi corpus di codice e documentazione, mostrano capacità emergenti superiori agli strumenti di analisi statica convenzionali.

La scoperta conferma ciò che molti ricercatori ipotizzavano ma temevano di veder concretizzato: i modelli AI possono identificare classi di vulnerabilità che sfuggono sistematicamente agli strumenti automatizzati tradizionali.

L’evento pianificato: compromissione di massa sventata


Secondo GTIG, il threat actor aveva pianificato di utilizzare l’exploit in un mass exploitation event — un attacco opportunistico su larga scala verso tutti i sistemi vulnerabili esposti su internet. La proactive discovery da parte di Google ha permesso di interrompere la catena prima che l’exploit venisse utilizzato in produzione.

Google ha lavorato con il vendor del software colpito per la divulgazione responsabile della vulnerabilità e il rilascio di una patch correttiva, senza rivelare pubblicamente il nome dello strumento interessato per limitare il rischio di sfruttamento da parte di altri attori durante la finestra di patching.

Il quadro più ampio: AI e cybercrime state-sponsored


L’incidente non è isolato: il report GTIG del maggio 2026 documenta una tendenza sistematica all’adozione di strumenti AI da parte di gruppi APT nation-state. In particolare:

  • Cina: operatori state-linked stanno sperimentando sistemi AI per la vulnerability hunting automatizzata e il probing di target — essenzialmente automatizzando il processo di ricognizione e identificazione delle superfici di attacco.
  • Corea del Nord (APT45): il gruppo sta utilizzando AI per processare migliaia di exploit check in bulk e arricchire il proprio toolkit, accelerando significativamente i tempi di sviluppo di nuove capacità offensive.
  • Gruppi criminali non-state: come dimostrato da questo episodio, anche attori privi di risorse statali hanno ormai accesso a capacità di sviluppo exploit AI-assisted tramite modelli commerciali o open source.

Il democratizzazione degli strumenti AI abbassa significativamente la barriera tecnica per lo sviluppo di exploit sofisticati, storicamente appannaggio di gruppi con risorse e competenze elevate.

Due righe per i difensori


Questa scoperta accelera un dibattito che era rimasto per lungo tempo teorico: se gli attaccanti usano AI per trovare vulnerabilità, i difensori devono adottare gli stessi strumenti con ancora maggiore urgenza. Alcune considerazioni pratiche:

  • Rivedere i programmi di bug bounty per includere vulnerabilità logiche e di flusso che i tool tradizionali non rilevano, premiando i ricercatori umani e AI-assisted che identificano difetti semantici.
  • Implementare AI-assisted code review nel ciclo di sviluppo, in particolare per la logica di autenticazione e autorizzazione — le aree dove i difetti semantici sono più probabili e più gravi.
  • Monitorare i pattern di accesso MFA con particolare attenzione ai bypass del secondo fattore, anche in presenza di credenziali valide.
  • Aggiornare tempestivamente tutti gli strumenti di amministrazione web esposti su internet, indipendentemente dalla loro percezione come “strumenti minori”.

Il primo zero-day AI-generated documentato in natura non segna la fine di un’era, ma l’inizio di una nuova fase nella corsa agli armamenti digitali. Le organizzazioni che non integreranno AI nei propri processi di difesa si troveranno strutturalmente svantaggiate rispetto a avversari che già la impiegano sistematicamente per attaccare.


‘National security’ lies fuel Wall Street Journal probe


FOR IMMEDIATE RELEASE:

New York, May 12, 2026 — The Wall Street Journal revealed yesterday that the Department of Justice sent grand jury subpoenas to the paper, demanding records of its journalists related to reporting about the lead-up to the Iran war. In recent months, prosecutors have also sent subpoenas to other media organizations, and to email and phone providers seeking information in leak inquiries, according to sources who spoke to the Journal.

The following can be attributed to Freedom of the Press Foundation Chief of Advocacy Seth Stern:

“The government’s investigation of The Wall Street Journal has nothing to do with ‘national security.’ It’s an outrageous attempt to silence sources, intimidate journalists, and bury the truth about President Trump’s unpopular decision to launch a war even his own generals warned against.

“We’ve seen this cowardly script before. ‘National security’ was a lie when the government tried to stop journalists from publishing the Pentagon Papers to cover up its failures, and it’s a lie now.

“These subpoenas are a direct threat to the public’s right to know, and the Journal is correct to fight them. Since the Department of Justice has abandoned the First Amendment, it’s up to the courts to restrain the government’s attempts to crush investigative journalism.

“Journalists at every news outlet across the U.S. must also harden their digital defenses now, to protect their sources from an administration obsessed with silencing critics and dismantling the free press.”

Please contact us if you would like further comment.


freedom.press/issues/national-…

The Pirate Post ha ricondiviso questo.

Digitalzwang schließt Menschen von der gesellschaftlichen Teilhabe aus. @digitalcourage fordert deshalb ein Grundrecht auf analoge Angebote. Noch bis 21. Mai kann mensch die entsprechende Petition mitzeichnen. netzpolitik.org/2026/petition-…

Message in a Bottle #9 – Liberian Blindspot


The following was submitted by a Pirate supporter using the pseudonym “Publicola”, presenting the case for a greater responsibility towards Liberia. This article is apart of the project “Message in a Bottle”, allowing supporters of the US Pirate Party to submit editorial articles to the United States Pirate Party website.


Liberia is the result of the United States of America.

That is not hyperbole, and that is not something that requires historical revisionism or requires you to connect the dots.

Without the United States of America, and specifically the American Colonization Society, Liberia as it exists today would not be here today.

In the early part of the 19th century, the American Colonization Society would be founded with the explicit goal of having a place in Africa for free African Americans.

Members included peace-loving Quakers who thought the United States was too racist to black people and couldn’t possibly see their integration into WASP dominated society, slaveholders that fears a slave rebellion with too many freedmen running around, and some of the most powerful politicians of their day.

People like [slaveowner] President James Madison, who actually served as President of the American Colonization Society in the early 1830s (AFTER having been a two-term United States President) and [slaveowner] Senator Henry Clay, perhaps the most consequential man of the early ACS and, in turn, Liberia.

The ACS had its detractors; Frederick Douglass viewed it as a prejudice-driven scheme that he opposed because Black Americans have just as much a right to claim the United States as White Americans. William Lloyd Garrison, initially a good-faith member, came to view it as a scheme to get rid of Black Americans instead of slavery.

Martin Delany, who came to conclusions of despair over the prospect of Black Americans following a decade of Fugitive Slave Acts and Dred Scott rulings, viewed the American Colonization Society as a white man’s project for what should be a black man’s cause.

To be clear: this project was racist as fuck. There’s no defending it; abolitionists in their day saw the American Colonization Society for what it was and what it was a “send them back instead of integrate them” scheme, dominated by slaveowners and deeply unpopular with many Black Americans.

That, of course, doesn’t change the fact that the American Colonization existed and carved a piece of West Africa for their project. They named the colony “Liberia” and its capital “Monrovia” after [slaveowner] President James Monroe.

[Slaveowner] Henry Clay, Mr. Whig Party himself, was always a driving force behind the project. It hindsight, it becomes no coincidence that the Americo-Liberian-dominated “True Whig Party” (TWP) was the ruling party of Liberia for over 100 years.

Future Liberian President Edward James Roye, born to landowning freedmen in Ohio, university-educated and a business owner, moved to the Colony of Liberia in 1846, a year before independence, aged 31 before immediately rising to the top of Liberia’s political system. He became Speaker of the House during the 1849-1850 session, and would go on to unsuccessfully run for the Presidency under the “[Old] Whig Party” ticket in 1855.

Something tells me they weren’t calling themselves the “Old Whig Party” at the time. That’s also a much sooner presence of a “Whig Party” in Liberia than the 1869 “founding” of the TWP implies.

One could make the argument that the Whig Party of the United States had become transatlantic, and while they might not have been in collaboration with their American counterparts, they certainly carried on the Henry Clay tradition of “Whiggism” into Liberia, not merely being inspired by it.

So even as the Whig Party died in the United States, it survived before experiencing their own true rise as the True Whig Party in Liberia.

One would assume that the project, perhaps, died after Liberia gained its independence. Maybe after slavery was abolished by the United States? Surely the project lost all its credibility and luster by the end of Reconstruction at the latest.

Well, the last boat carrying African-Americans from the United States to Liberia? 1904.

When did the ACS finally die? 1964.

The final President of the American Colonization Society lived through the Cuban Missile Crisis and the Kennedy assassination.

So mind you, Liberia was carved out of West Africa. Did the Native West Africans have any say? No; they were largely treated in a similar fashion to how Native Americans were treated.

And former slaves, too. Many of the Americo-Liberians became slaveowners themselves, enslaving the local population.

Colonization Society indeed.

The imposed power structure onto the local population by first the ACS, then the settlers, is entirely the result of the United States. Presidents from Liberia were U.S.-born from 1847 to 1884. Native Liberians weren’t granted citizenship in their own land until the 1904, and couldn’t meaningfully vote until 1946 (even then, under property qualifications that excluded most). Even when it transitioned from U.S.-born to Liberian-born Presidents, the Americo-Liberians, only ~5% of the Liberian population, remained the dominant class until the coup that killed William Tolbert in 1980.

1980.

So from the moment of Liberia’s inception in 1821 until 1980, it had American DNA written into its very existence.

This is not a rallying cry to say “We have a paternalistic responsibility towards Liberia,” as that’s absurd and paternalistic governance often gets stripped down to imperialistic oversight. In no way should this be used as an excuse to extract Liberian resources, exploit Liberian labor or gain economic or military advantage in the region through Liberia.

What I am saying, is that the way the Pirate Party says they have a unique responsibility towards Latin America, I also believe we have just as much a unique, but entirely unique in its own right, responsibility towards Liberia.

This party often writes about self-determination. This party wrote about the “bastardization of self-determination.” I feel like the ACS is one of the greatest cases of that in modern history.

In direct comparison to Zionism, there was a need to have the mistreated go to their “homelands” and create a new nation for them. This creation would lead to genocide and apartheid, and created an in-group and an out-group. Supporters of both haven’t always been those who are sympathetic to their plight; while some were, some simply sought to get rid of them.

Hitler was supportive of the Zionist cause in the same way slaveowners were supportive of the American Colonization Society.

The entire nation of Liberia is a reflection of that that aforementioned bastardization. It was our project, our settlers from our country escaping our racism. It imposed our systems of oppression, governance and dominance over a native peoples who never had a say in the matter.

I like to think the Pirate Party would allow every single American Indian Reservation to have a seat at the table, much like they do with the U.S. territories.

I hope the United States Pirate Party would do what they can for a Liberian Pirate Party, and perhaps even allow them a seat at the table.

I also hope that, should the day finally come that the United States Pirate Party comes to power in the United States federally, the USPP keeps the promises they made to Latin America, and I hope they extend those promises to Liberia as well.


uspirates.org/message-in-a-bot…

The Pirate Post ha ricondiviso questo.

Das Recht auf analoges Leben soll ins Grundgesetz – mehr als 64.000 Unterzeichner*innen fordern das in einer Petition. Interessierte können sich bis 21. Mai anschließen. Im Interview erklären die Initiator*innen: Der ausufernde Digitalzwang schadet der Demokratie. netzpolitik.org/2026/petition-…
in reply to netzpolitik.org

Ich habe da mal eine Frage, ist dass gemeint, was da steht oder generell? Zum Beispiel Bürojob wo eigentlich gar nix ohne PC geht, dass des auch Offline dann gehen muss mit Stift und Papier?

Zu Fahrkarten, stimme ich zu, dass auch am Automaten etc gehen muss, mit Karte etc.

DB App, Doclib zum Beispiel ist auch das Problem mit dem Datenschutz... Dann oft US Server, Google Zwang... Müsste alles auch ohne Googledienste gehen...
Vorallem ist das Zeug ja praktisch Kritische Infrastruktur...
Zu DHL, glaub die sind schon wieder ohne Bildschirm davon abgekommen. Aber eigentlich geht eh nix dahin sondern Shop. Habe eher das Problem das Zeug darein zu bekommen...
Das in Packstation ging, war ganz am Anfang mal, dass Leute die kennen lernen sollten und da gab's Scancode zum abholen.
Doclib wüsste ich nichtmal wo man das hier nutzen kann.

Speisekarte nur per QR Code, habe ich noch nie gesehen, kann man eher froh sein, dass man nicht mit Schubkarre voll Bargeld ankarren muss

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Technology is never neutral. Far too often, LGBTIQ+ communities are among the first to experience the consequences: profiling, censorship, data exploitation, discriminatory systems & online harassment.

⚠️ These are warning signs about the direction our digital environment is taking.

At Digital Rights Lounge, we'll be discussing how tech shapes queer lives, what risks of surveillance are & how we can fight back.

📍 19 May, 13.00-16.30 at BeCentral in Brussels

📝 : forms.office.com/Pages/Respons…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

GhostLock: New Attack Technique Locks Enterprise Files Like Ransomware — Without Any Encryption
#CyberSecurity
securebulletin.com/ghostlock-n…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Operation SilentCanvas: Hackers Hide PowerShell Malware in Fake JPEG to Deploy Trojanized ScreenConnect Backdoor
#CyberSecurity
securebulletin.com/operation-s…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Hackers Deploy AI-Generated Zero-Day Exploit to Bypass 2FA — Google GTIG Q2 2026 Report
#CyberSecurity
securebulletin.com/hackers-dep…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

ShinyHunters Breaches Canvas LMS: Student Data from 9,000 Schools Exposed in Extortion Campaign
#CyberSecurity
securebulletin.com/shinyhunter…
The Pirate Post ha ricondiviso questo.

Google Broke reCAPTCHA for De-Googled Android Users reclaimthenet.org/google-broke…

Google has tied its next-generation reCAPTCHA system to Google Play Services on Android, meaning anyone running a de-Googled phone will automatically fail verification when the system decides to challenge them. Another day another Google take over the world, open web and mobile ecosystems. This battle seems to be lost already because governments are ignoring shenanigans of Google.

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Copilot Studio accelera con .NET 10 su WebAssembly: fingerprinting automatico e AOT ottimizzato
#tech
spcnet.it/copilot-studio-accel…
@informatica


Copilot Studio accelera con .NET 10 su WebAssembly: fingerprinting automatico e AOT ottimizzato


Microsoft Copilot Studio è uno strumento di low-code per la creazione di agenti AI, e uno dei suoi punti di forza è l’esecuzione di logica C# direttamente nel browser tramite .NET WebAssembly (WASM). Di recente, il team di Copilot Studio ha completato la migrazione del motore WASM da .NET 8 a .NET 10 — e i risultati sono più che soddisfacenti. In questo articolo analizziamo in dettaglio cosa è cambiato, perché vale la pena migrare anche per le vostre applicazioni Blazor e WebAssembly, e quali ottimizzazioni concrete offre .NET 10 in questo ambito.

Il contesto: C# nel browser con .NET WebAssembly


Qualche mese fa il team di Copilot Studio aveva già pubblicato un post tecnico su come utilizzano .NET e WebAssembly per eseguire codice C# nel browser, mostrando i guadagni ottenuti passando da .NET 6 a .NET 8. Ora il ciclo si ripete con il salto a .NET 10, e la migrazione è stata descritta come sorprendentemente semplice.

Aggiornare un’applicazione WASM da .NET 8 a .NET 10 è sostanzialmente una questione di modificare il TargetFramework nei file .csproj e verificare la compatibilità delle dipendenze. Per Copilot Studio, il percorso è stato esattamente questo, e il build .NET 10 è già in produzione.

Fingerprinting automatico degli asset: addio script PowerShell personalizzati


Una delle novità più apprezzate di .NET 10 per le applicazioni WebAssembly è il fingerprinting automatico degli asset WASM. Quando si pubblica un’applicazione WebAssembly, ogni risorsa include ora un identificatore univoco nel nome del file, garantendo sia il cache-busting che l’integrità senza alcun intervento manuale.

Prima di .NET 10, Copilot Studio — come molte app WASM — doveva:

  • Leggere il manifest blazor.boot.json pubblicato per enumerare tutti gli asset.
  • Eseguire uno script PowerShell personalizzato per rinominare ogni file aggiungendo un hash SHA256.
  • Passare un argomento integrity esplicito lato JavaScript al momento del caricamento di ogni risorsa.

Con .NET 10, tutto questo è storia. Le risorse vengono importate direttamente da dotnet.js, i fingerprint fanno parte dei nomi di file pubblicati, e l’integrità è validata automaticamente. Il team ha potuto eliminare lo script di rinomina personalizzato e rimuovere l’argomento integrity dal loader JavaScript lato client.

Tip: Se caricate il runtime .NET WASM all’interno di un WebWorker, impostate dotnetSidecar = true durante l’inizializzazione per garantire il corretto avvio nel contesto worker.


Output AOT più piccolo con WasmStripILAfterAOT


L’altra novità di spicco per .NET WASM in .NET 10 è che WasmStripILAfterAOT è ora abilitato per default per le build AOT. Dopo la compilazione ahead-of-time dei metodi .NET in WebAssembly, il codice IL (Intermediate Language) originale non è più necessario a runtime: .NET 10 lo elimina dall’output pubblicato per default. In .NET 8 questa impostazione esisteva ma era disattivata.

Copilot Studio adotta una strategia di packaging più sofisticata. Per ottenere il meglio sia in termini di avvio rapido che di performance a regime, spedisce un singolo pacchetto NPM che contiene sia un motore JIT (per l’avvio veloce) che un motore AOT (per la massima velocità di esecuzione). A runtime, Copilot Studio carica JIT e AOT in parallelo: il motore JIT gestisce le interazioni iniziali, poi cede il controllo all’AOT non appena è pronto. I file identici tra i due modi vengono deduplicati per mantenere il pacchetto compatto.

Poiché WasmStripILAfterAOT produce assembly AOT che non corrispondono più alle controparti JIT, meno file possono essere condivisi tra i due motori:

  • Su .NET 8: 59 file condivisi tra JIT e AOT.
  • Su .NET 10: solo 22 file condivisi.

L’effetto netto sul pacchetto Copilot Studio è un aumento di dimensione di circa il 15%. In pratica l’impatto per gli utenti finali è contenuto, poiché il motore JIT resta quello scaricato ed eseguito per primo: l’interattività iniziale non è compromessa. Il download AOT è circa 6% (~200 ms) più lento su una LAN veloce e circa 17% (~5 secondi) più lento su una connessione 4G — tutto in background, dopo che l’app è già operativa.

I risultati di performance


I benefici a runtime superano ampiamente il costo in termini di packaging per i workload di Copilot Studio:

  • ~20% più veloce nell’esecuzione alla prima chiamata (cold path).
  • ~5% più veloce nelle chiamate successive (warm path).

I guadagni sono più visibili negli agenti grandi e complessi (“big bots”), dove il codice AOT compilato fa il grosso del lavoro. Per workload più semplici i miglioramenti sono comunque presenti ma più contenuti.

Come migrare la vostra app a .NET 10


Se avete un’applicazione Blazor o .NET WebAssembly su .NET 8, vale la pena provare .NET 10. Ecco i passi essenziali:

  1. Aggiornate <TargetFramework> a net10.0 e aggiornate i riferimenti a pacchetti Microsoft.AspNetCore.*, Microsoft.Extensions.* e System.*.
  2. Rimuovete eventuale logica personalizzata di rinomina degli asset o plumbing per l’integrity — il fingerprinting è ora integrato.
  3. Se compilate in AOT, beneficerete automaticamente del nuovo default WasmStripILAfterAOT.

Se avete bisogno di supporto per l’aggiornamento, GitHub Copilot app modernization for .NET può analizzare la soluzione, pianificare l’aggiornamento e applicare le modifiche necessarie.

Conclusione


La migrazione di Copilot Studio a .NET 10 è l’ennesima conferma che ogni release di .NET porta WebAssembly a essere più veloce, più leggero e più semplice da distribuire. La rimozione dello script di fingerprinting personalizzato è un piccolo ma significativo esempio di come il framework stia maturando: quello che prima richiedeva custom tooling è ora built-in. Se state ancora su .NET 8, questo è il momento giusto per valutare il salto.

Fonte: Copilot Studio gets faster with .NET 10 on WebAssembly — Daniel Roth, .NET Blog


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Durable Workflows nel Microsoft Agent Framework: da console app ad Azure Functions
#tech
spcnet.it/durable-workflows-ne…
@informatica


Durable Workflows nel Microsoft Agent Framework: da console app ad Azure Functions


Il Microsoft Agent Framework (MAF) è un framework open source multi-linguaggio pensato per costruire, orchestrare e distribuire agenti AI. Con le ultime versioni, il framework ha introdotto un modello di programmazione a workflow che permette di comporre più agenti e unità di lavoro in pipeline multi-step. In questo articolo vedremo come funziona questo modello, come aggiungere durabilità ai workflow e come fare il deploy su Azure Functions.

Il modello di programmazione a Workflow


Il sistema si basa su due concetti fondamentali: Executor e WorkflowBuilder.

Executor: l’unità di lavoro


Un Executor è la granularità minima del workflow. Riceve un input tipizzato, lo elabora e produce un output. Si crea estendendo Executor<TInput, TOutput>:

internal sealed class OrderLookup() : Executor<OrderCancelRequest, Order>("OrderLookup")
{
    public override async ValueTask<Order> HandleAsync(
        OrderCancelRequest message,
        IWorkflowContext context,
        CancellationToken cancellationToken = default)
    {
        await Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken);
        return new Order(
            Id: message.OrderId,
            OrderDate: DateTime.UtcNow.AddDays(-1),
            IsCancelled: false,
            CancelReason: message.Reason,
            Customer: new Customer(Name: "Mario", Email: "mario@example.com"));
    }
}

internal sealed class OrderCancel() : Executor<Order, Order>("OrderCancel")
{
    public override async ValueTask<Order> HandleAsync(
        Order message, IWorkflowContext context,
        CancellationToken cancellationToken = default)
    {
        await Task.Delay(TimeSpan.FromMilliseconds(200), cancellationToken);
        return message with { IsCancelled = true };
    }
}

internal sealed class SendEmail() : Executor<Order, string>("SendEmail")
{
    public override ValueTask<string> HandleAsync(
        Order message, IWorkflowContext context,
        CancellationToken cancellationToken = default)
    {
        return ValueTask.FromResult(
            $"Email di cancellazione inviata per l'ordine {message.Id} a {message.Customer.Email}.");
    }
}

I parametri di tipo definiscono il contratto: TInput è ciò che riceve dal passo precedente, TOutput è ciò che passa al passo successivo. Il framework verifica la compatibilità dei tipi a compile time.

WorkflowBuilder: il grafo di esecuzione


Il WorkflowBuilder collega gli executor in un grafo diretto. Si definiscono gli archi tra executor e si ottiene un oggetto Workflow immutabile:

OrderLookup orderLookup = new();
OrderCancel orderCancel = new();
SendEmail sendEmail = new();

Workflow cancelOrder = new WorkflowBuilder(orderLookup)
    .WithName("CancelOrder")
    .WithDescription("Cancella un ordine e notifica il cliente")
    .AddEdge(orderLookup, orderCancel)
    .AddEdge(orderCancel, sendEmail)
    .Build();

Esecuzione in-process


Per eseguire il workflow senza dipendenze esterne si usa InProcessExecution.RunStreamingAsync. Restituisce uno StreamingRun che emette eventi man mano che ogni step completa:

var cancelRequest = new OrderCancelRequest(OrderId: "123", Reason: "Colore errato");

await using StreamingRun run = await InProcessExecution.RunStreamingAsync(
    cancelOrder, input: cancelRequest);

await foreach (WorkflowEvent evt in run.WatchStreamAsync())
{
    if (evt is ExecutorCompletedEvent completed)
        Console.WriteLine($"{completed.ExecutorId}: {completed.Data}");
}

Bastano i pacchetti NuGet Microsoft.Agents.AI e Microsoft.Agents.AI.Workflows. Nessuna infrastruttura, nessun Docker, solo una console app .NET.

Aggiungere la durabilità con DurableTask


L’esecuzione in-process perde lo stato se il processo termina. Per workflow di produzione — che devono sopravvivere ai riavvii, girare per ore e rimanere osservabili — si aggiunge il pacchetto Microsoft.Agents.AI.DurableTask:

dotnet add package Microsoft.Agents.AI.DurableTask --prerelease
dotnet add package Microsoft.DurableTask.Client.AzureManaged
dotnet add package Microsoft.DurableTask.Worker.AzureManaged
dotnet add package Microsoft.Extensions.Hosting

Il runtime durable fornisce:
  • Esecuzione stateful e durabile: il workflow sopravvive ai riavvii del processo
  • Checkpointing automatico: il progresso viene salvato dopo ogni step
  • Esecuzione distribuita: gli executor possono girare su macchine diverse
  • Orchestrazioni long-running: i workflow possono durare minuti, ore o giorni
  • Osservabilità: dashboard integrata per monitorare e gestire le esecuzioni

Il punto chiave è che la definizione del workflow non cambia. Si usa lo stesso WorkflowBuilder, cambia solo l’hosting:

string dtsConnectionString = "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.ConfigureDurableWorkflows(
            workflowOptions => workflowOptions.AddWorkflow(cancelOrder),
            workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
            clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
    })
    .Build();

await host.StartAsync();

IWorkflowClient workflowClient = host.Services.GetRequiredService<IWorkflowClient>();
IAwaitableWorkflowRun run = (IAwaitableWorkflowRun)await workflowClient
    .RunAsync(cancelOrder, new OrderCancelRequest("12345", "Colore errato"));

string? result = await run.WaitForCompletionAsync<string>();
Console.WriteLine($"Workflow completato: {result}");

Per lo sviluppo locale si avvia il DTS Emulator in Docker:
docker run -d --name dts-emulator   -p 8080:8080 -p 8082:8082   mcr.microsoft.com/dts/dts-emulator:latest

La dashboard è disponibile su http://localhost:8082 e mostra la timeline di ogni executor, gli input/output per ciascun step e lo stato delle esecuzioni.

Fan-Out / Fan-In con agenti AI


Uno dei pattern più potenti è il fan-out/fan-in: più agenti AI elaborano lo stesso input in parallelo, poi un executor aggrega i risultati. MAF supporta l’uso diretto di agenti AI come executor tramite il metodo estensione AsAIAgent:

AIAgent physicist = chatClient.AsAIAgent(
    "Sei un esperto di fisica. Rispondi in 2-3 frasi concise.", "Physicist");

AIAgent chemist = chatClient.AsAIAgent(
    "Sei un esperto di chimica. Rispondi in 2-3 frasi concise.", "Chemist");

Workflow workflow = new WorkflowBuilder(parseQuestion)
    .WithName("ExpertReview")
    .AddFanOutEdge(parseQuestion, [physicist, chemist])
    .AddFanInBarrierEdge([physicist, chemist], aggregator)
    .Build();

Con il runtime durable, il fisico potrebbe eseguire su una VM e il chimico su un’altra. Se il processo si riavvia a metà esecuzione, gli agenti già completati non vengono rieseguiti grazie al checkpointing.

Deploy su Azure Functions


Per il deploy serverless si aggiunge il pacchetto Microsoft.Agents.AI.Hosting.AzureFunctions. I vantaggi:

  • Scaling serverless: Azure Functions scala automaticamente in base al carico
  • HTTP endpoint automatici: ogni workflow registrato ottiene un HTTP trigger, senza scrivere controller o routing
  • Supporto MCP: i workflow possono essere esposti come MCP tool con un singolo flag, rendendoli scopribili da altri agenti AI
  • Zero boilerplate: il pacchetto genera orchestratori e activity function automaticamente


Conclusioni


Il Microsoft Agent Framework propone un’astrazione pulita per costruire workflow di agenti AI: si definisce il grafo una volta sola, e si sceglie il runtime — in-process per lo sviluppo, durable per la produzione, Azure Functions per il serverless. La separazione netta tra definizione del workflow e modalità di hosting è il punto di forza dell’approccio: consente di passare da un prototipo locale a un’orchestrazione distribuita con modifiche minime al codice.

Il framework è open source e in evoluzione rapida. Il codice di esempio completo è disponibile nella repository GitHub del Microsoft Agent Framework.

Fonte originale: Durable Workflows in the Microsoft Agent Framework — .NET Blog, Shyju Krishnankutty


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Tra pochi mesi Android rischia di diventare una piattaforma sempre più chiusa: Google sembra voler restringere progressivamente quella libertà che ha reso questo sistema unico nel panorama mobile.

Per questo è fondamentale difendere un Android aperto. In prima linea ci sono anche realtà italiane come @fedimedia e @ItaLinuxSociety, che hanno aderito alla campagna.

👉 Qui trovi la lettera aperta a Google:
fedimedia.it/fedimedia-firma-l…

Condividi e segui le iniziative nel gruppo👉 @opensource

#android


Fedimedia firma la lettera aperta per Mantenere Android Libero, unisciti alla battaglia “keep android open” per liberare lo smartphone


Oggi il controllo degli smartphone è sempre più concentrato nelle mani di poche grandi aziende. Anche un sistema che nasce libero come Android rischia di essere progressivamente chiuso, regolato e trasformato in uno strumento sotto controllo centralizzato, ma qualcosa si sta muovendo.

Fedimedia Italia APS è parte attiva del movimento internazionale keep android open che non si limita a denunciare, ma lavora concretamente insieme ad alcune delle più importanti realtà del mondo open source e del free software per difendere un futuro digitale libero, aperto e decentralizzato ed è fra i firmatari della lettera aperta a google per mantenere l’ecosistema android aperto.

Per questa campagna abbiamo attivato un banner in alto con un conto alla rovescia: il tempo che resta a un Android davvero libero. Un segnale chiaro per sensibilizzare tutte le persone su quanto sta accadendo e sull’urgenza di non restare a guardare.

👉 Se credi anche tu che la tecnologia debba essere al servizio delle persone e non il contrario puoi fare un passo concreto:

Sostieni Fedimedia e partecipa al movimento per la liberazione della tecnologia. Bastano pochi secondi per lasciare il tuo interesse tramite il modulo di contatto. e venire aggiornato sulle azioni intraprese da fedimedia e dal movimento Keep Android Open.

La lettera che abbiamo indirizzato al movimento Keep Android Open


Gentili promotori della campagna KeepAndroidOpen,

con grande interesse e condivisione dei valori espressi nella vostra lettera aperta a Google, scriviamo per aderire ufficialmente alla vostra iniziativa in difesa di un Android libero, aperto e indipendente da controlli centralizzati.

Fedimedia Italia APS nasce per promuovere unecosistema digitale basato su principi di libertà, decentralizzazione e sovranità tecnologica. Come associazione che si batte per un web etico e indipendente dalle Big Tech, non possiamo che sostenere con forza la vostra opposizione alla registrazione obbligatoria degli sviluppatori.

Perchè non dovrebbero vincolare lo sviluppo di app su qualsiasi dispositivo ?

Ci piace pensare ad Android come a una tela di pittore, ai dispositivi come a pennelli e alle app come a colori: chi produce gli strumenti non può pretendere di controllare l’arte che ne scaturisce, né tantomeno imporre agli artisti di registrarsi presso un unico fornitore per poter creare.

La libertà di espressione digitale, proprio come quella artistica, non può essere soggetta a permessi o a gatekeeper. Imporre una registrazione centralizzata significa trasformare una piattaforma aperta in un sistema chiuso a chi non autorizzato da voi, dove la creatività e l’innovazione sono ostaggi di regole arbitrarie e di interessi commerciali.

Per noi, la decentralizzazione e l’apertura non sono solo scelte tecniche, ma valori fondanti: ogni sviluppatore, ogni utente, ogni comunità deve poter operare senza dover chiedere il permesso a un’unica autorità. La vostra battaglia è anche la nostra, perché difendere Android significa difendere il diritto di tutti a un futuro digitale pluralista, trasparente e rispettoso dei diritti fondamentali.

Con questa email, vi comunichiamo quindi la nostra piena adesione alla campagna KeepAndroidOpen. Siamo pronti a sostenervi nella diffusione dei vostri obiettivi, a partecipare attivamente alle iniziative promosse e a collaborare per costruire alternative concrete che preservino la libertà e l’apertura di Android, valori che condividiamo profondamente.

Rimaniamo a disposizione per qualsiasi ulteriore passo o azione collettiva.

Cordiali saluti,
Fedimedia Italia APS

Qui di seguito la lettera aperta indirizzata ai vertici di Google


Questa è la traduzione della lettera aperta a Google indirizzata ai fondatori, CEO e dirigenti Google

Dat</code><code>a</code><code>:</code><code> </code><code>24 febbraio</code><code> 2026</code><code>A</code><code>:</code><code> </code><code>Sundar Pichai, Chief Executive Officer, Google</code><code>A</code><code>:</code><code> </code><code>Sergey Brin, Founder and Board Member, Google</code><code>A</code><code>:</code><code> </code><code>Larry Page, Founder and Board Member, Google</code><code>A</code><code>: Vijaya Kaza, General Manager for App & Ecosystem Trust, Google</code><code>CC:</code><code> </code><code>Regulatory authorities, policymakers, and the Android developer community</code><code>Re:</code><code> </code><code>Mandatory Developer Registration for Android App Distribution

Noi, le organizzazioni sottoscritte che rappresentano la società civile, le istituzioni no-profit e le aziende tecnologiche, scriviamo per esprimere la nostra ferma opposizione alla politica annunciata da Google, che richiede a tutti gli sviluppatori di app Android di registrarsi in maniera centralizzata presso Google per poter distribuire applicazioni al di fuori del Google Play Store e che entrerà in vigore in tutto il mondo nei prossimi mesi.

Pur riconoscendo l’importanza della sicurezza della piattaforma e della sicurezza degli utenti, la piattaforma Android include già diversi meccanismi di sicurezza che non richiedono una registrazione centralizzata. Iniettare forzatamente un modello di sicurezza estraneo, in contrasto con la storica natura aperta di Android, minaccia l’innovazione, la concorrenza, la privacy e la libertà degli utenti. Esortiamo Google a ritirare questa policy e a collaborare con le comunità open source e della sicurezza per trovare alternative meno restrittive.

Le nostre preoccupazioni


1. Controllo oltre lo Store di Google

Android è storicamente caratterizzato come una piattaforma aperta in cui utenti e sviluppatori possono operare indipendentemente dai servizi di Google. La politica di registrazione degli sviluppatori proposta modifica radicalmente tale rapporto, richiedendo agli sviluppatori che desiderano distribuire app tramite canali alternativi (i propri siti web, app store di terze parti, sistemi di distribuzione aziendali o trasferimenti diretti) di richiedere prima l’autorizzazione a Google attraverso una procedura di verifica obbligatoria, che prevede l’accettazione dei termini e delle condizioni di Google, il pagamento di una quota e il caricamento di un documento di identità rilasciato dal governo.

Ciò estende l’autorità di controllo di Google oltre il proprio marketplace, estendendola a canali di distribuzione in cui non ha alcun ruolo operativo legittimo. Gli sviluppatori che scelgono di non utilizzare i servizi di Google non dovrebbero essere costretti a registrarsi e a sottoporsi al giudizio di Google. Centralizzare la registrazione di tutte le applicazioni a livello mondiale conferisce inoltre a Google nuovi poteri per disattivare completamente qualsiasi app desideri, per qualsiasi motivo, per l’intero ecosistema Android.

2. Barriera all’ingresso e ostacolo all’innovazione

La registrazione obbligatoria crea ostacoli e barriere all’ingresso, in particolare per:

  • Gli sviluppatori individuali e i piccoli team con risorse limitate
  • I progetti open source che si basano su collaboratori volontari
  • Gli sviluppatori in aree geografiche con accesso limitato all’infrastruttura di registrazione di Google
  • Gli sviluppatori focalizzati sulla privacy che evitano gli ecosistemi di sorveglianza
  • La risposta alle emergenze e le organizzazioni umanitarie che richiedono un rapido intervento
  • Gli attivisti che lavorano per la libertà di Internet in paesi che criminalizzano ingiustamente tale lavoro
  • Gli sviluppatori in paesi o aree in cui Google non può consentire loro di registrarsi a causa di sanzioni
  • I ricercatori e gli accademici che sviluppano applicazioni sperimentali
  • Le applicazioni aziendali e governative interne che non sono mai state pensate per un’ampia distribuzione pubblica

Ogni ulteriore ostacolo burocratico riduce la diversità nell’ecosistema software e concentra il potere nelle mani di grandi attori affermati che possono assorbire più facilmente tali costi di conformità.

3. Problemi di privacy e sorveglianza

Richiedere la registrazione a Google crea un database completo di tutti gli sviluppatori Android, indipendentemente dal fatto che utilizzino o meno i servizi Google. Ciò solleva seri interrogativi su:

  • Quali informazioni personali devono fornire gli sviluppatori
  • Come queste informazioni saranno archiviate, protette e utilizzate
  • La possibilità che questi dati possano essere soggetti a richieste governative o procedimenti legali
  • La modalità con cui l’attività degli sviluppatori possa essere monitorata nell’intero ecosistema
  • L’impatto che comporta per gli sviluppatori che lavorano su applicazioni che tutelano la privacy o che sono politicamente sensibili

Gli sviluppatori dovrebbero avere il diritto di creare e distribuire software senza sottoporsi a inutili controlli o sorveglianza.

4. Rischi di applicazione arbitraria e chiusura dell’account

Gli attuali processi di revisione delle app di Google sono stati criticati per la scarsa trasparenza del processo decisionale, l’applicazione incoerente delle norme e i meccanismi di ricorso limitati. L’estensione di questo sistema a tutti i dispositivi certificati Android comporta i seguenti rischi:

  • Rifiuto arbitrario o sospensione senza chiara giustificazione
  • Sistemi automatizzati che prendono decisioni consequenziali con una supervisione umana insufficiente
  • Sviluppatori che perdono la possibilità di distribuire app su tutti i canali a causa di una singola decisione aziendale non verificabile
  • Considerazioni politiche o competitive che influenzano l’approvazione della registrazione
  • Impatto sproporzionato sulle comunità emarginate e applicazioni controverse ma legali

Un singolo punto di vulnerabilità controllato da una sola azienda è l’antitesi di un ecosistema software sano e competitivo.

5. Implicazioni anticoncorrenziali

Questo requisito consente a Google di raccogliere informazioni su tutte le attività di sviluppo Android, tra cui:

  • Quali app vengono sviluppate e da chi
  • Le strategie di distribuzione e modelli di business alternativi
  • Le minacce competitive ai servizi di Google
  • Le tendenze di mercato e preferenze degli utenti al di fuori dell’ecosistema di Google

Questa asimmetria informativa fornisce a Google notevoli vantaggi competitivi, le consente di anticipare, copiare e indebolire prodotti e servizi concorrenti e potrebbe sollevare numerose questioni in materia di antitrust.

6. Problemi normativi

Le autorità di regolamentazione di tutto il mondo, tra cui la Commissione Europea, il Dipartimento di Giustizia degli Stati Uniti e le autorità garanti della concorrenza in diverse giurisdizioni, hanno esaminato con sempre maggiore attenzione la capacità delle piattaforme dominanti di privilegiare i propri servizi e limitare la concorrenza, richiedendo maggiore apertura e interoperabilità. Notiamo inoltre crescenti preoccupazioni circa l’intervento normativo che aumenta la sorveglianza di massa, ostacolando la libertà del software, l’apertura di Internet e la neutralità dei dispositivi.

Invitiamo Google a trovare modi alternativi per conformarsi agli obblighi normativi, promuovendo modelli che rispettino la natura aperta di Android senza aumentare il controllo dei gatekeeper sulla piattaforma.

Le misure esistenti sono sufficienti


La piattaforma Android include già diversi meccanismi di sicurezza che non richiedono la registrazione centrale:

  • Funzionalità di sicurezza a livello di sistema operativo, sandbox delle applicazioni e sistemi di autorizzazione
  • Avvisi utente per le applicazioni installate direttamente (o “sideloaded”)
  • Google Play Protect (che gli utenti possono scegliere di abilitare o disabilitare)
  • Certificati di firma dello sviluppatore che stabiliscono la provenienza del software

Non è stata presentata alcuna prova che queste misure di sicurezza siano insufficienti a continuare a proteggere gli utenti Android come hanno fatto per tutti i diciassette anni di esistenza di Android. Se la preoccupazione di Google è realmente la sicurezza piuttosto che il controllo, dovrebbe investire nel miglioramento di questi meccanismi esistenti anziché creare nuovi colli di bottiglia e centralizzare il controllo.

La nostra petizione


Invitiamo Google a:

  1. Abrogare immediatamenteil requisito obbligatorio di registrazione dello sviluppatore per la distribuzione a terze parti.
  2. Avviare un dialogo trasparentecon la società civile, gli sviluppatori e gli enti regolatori sui miglioramenti della sicurezza Android, nel rispetto dell’apertura e della concorrenza.
  3. Impegnarsi a favore della neutralità della piattaformaassicurando che Android rimanga una piattaforma realmente aperta in cui il ruolo di Google come fornitore della piattaforma non sia in conflitto con i suoi interessi commerciali.

Nel corso degli anni, Android si è evoluto in un’infrastruttura tecnologica fondamentale al servizio di centinaia di governi, milioni di aziende e miliardi di cittadini in tutto il mondo. Consolidare e centralizzare unilateralmente il potere di approvare il software nelle mani di un’unica azienda che può esimersi da una reale responsabilità e rendicontabilità è antitetico ai principi della libertà di pensiero, è un affronto al software libero, è una barriera insormontabile alla concorrenza ed è una minaccia universale alla sovranità digitale.

Imploriamo Google di invertire la rotta, porre fine al programma di verifica degli sviluppatori e iniziare a collaborare con la più ampia comunità degli sviluppatori per promuovere gli obiettivi di sicurezza senza sacrificare i principi di massima apertura in base ai quali è stato realizzato Android. La forza dell’ecosistema Android è storicamente basata sulla sua architettura aperta e Google deve impegnarsi per ripristinare il suo ruolo di fedele custode di tale fiducia.


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Contro il timesheet e lo snaturamento della ricerca: lettera aperta

@aisa @associazione-italiana-per-la-promozione-della-scienza-aperta @MariuzzoAndrea @mcp @fsyloslab

cryptpad.fr/form/#/2/form/view…

The Pirate Post ha ricondiviso questo.

Le università ospitano editori commerciali e agenti valutatori di stato. Si tratta solo di capire in che senso: Dati nostri, #IA loro: l’università come organismo ospite
#IA
The Pirate Post ha ricondiviso questo.

"Thousands of shady ads sell paper authorship for cash, large-scale investigation finds."
science.org/content/article/th…

PS: This article from _Science_ reports important news about paper mills. But apart from that, note that it draws from an #arXiv preprint that hasn't been released yet. It's a preprint preprint, and from _Science_. A nice example of the ongoing #ScholComm transformation.

#Misconduct #PaperMills

Questa voce è stata modificata (4 settimane fa)
in reply to petersuber

Update. You can now see the preprint itself, on #arXiv.
arxiv.org/abs/2604.24576

From the abstract: "We assemble BuyTheBy, a large, annotated dataset of timestamped, text-based paper mill advertisements from seven businesses operating out of seven different countries. The dataset consists of 18,710 individual advertisements, of which 15,839 have prices listed. Among these there are 20,598 positions listed as for sale on 5,567 unique products in 14 different product categories with 51,812 timestamped price data points."

#Misconduct #PaperMills #ScholComm

Questa voce è stata modificata (3 settimane fa)
in reply to petersuber

Update. Related:

"Opening Pandora's box: Paper mills in conference proceedings."
arxiv.org/abs/2604.22458

From the abstract: "This study aims to identify papers in conference proceedings whose titles have been offered for sale on social media platforms. We collected more than 4,000 unique publication offers from more than 200 social media channels and used semi-automated methods along with human assessment to match offers with papers published in IEEE conference proceedings. We identified 1,720 papers in 286 IEEE conference proceedings, accounting for up to 23.51% of an individual conference. These problematic papers are co-authored by more than 6,500 researchers from over 3,500 affiliations in 55 countries."

#Misconduct #PaperMills #ScholComm

reshared this

The Pirate Post ha ricondiviso questo.

"Key US science panels are being axed — and others are becoming less open."
nature.com/articles/d41586-026…

"A Nature analysis shows that the Trump administration has terminated more than 100 advisory committees to science agencies — and reduced the transparency and independence of those that remain… Researchers say that the elimination of panels and other changes seemingly contradict the Trump administration’s… executive order on ‘gold-standard science’ … to improve transparency in federally funded science."

#DefendResearch #GoldStandard #Trump #TrumpVResearch #USPol #USPolitics

ICYMI: Updates from the 5/10 Meeting


The media in this post is not displayed to visitors. To view it, please log in.

ICYMI

Arizona – The Arizona Pirate Party are currently holding a t-shirt design contest. All are welcome to submit designs, and submissions will be accepted until 11:59pm on Saturday May 16th. You can find the link to submit designs here.

Bylaws – An update to the bylaws will be voted on during the 5/17 meeting, with a vote to table the amendment until this particular meeting passing 3-2-1, with the one “No” vote coming from Florida, who wished to have the amendment passed ASAP versus next week.

The amendment, pertaining to quorum and updated to reflect the true workings of our meetings, will be the first piece of business voted on during the 5/17 meeting, following IDs and reports.

Committees – A request has been made for platform during last week’s meeting has been reiterated. Platform committee has been asked to articulate our position more accurately and explicitly to voice our concerns over Citizens United and getting money out of politics.

Current debate involves whether this is an extension of “Opening up the Government” or shall be under a new plank, tentatively entitled “Restoring Democratic Integrity.”

Drew Bingaman – Drew appeared on the United States Transhumanist Party’s Virtual Enlightenment Salon yesterday to discuss various topics and promote his campaign. Drew follows Blase Henry who also recently joined to promote his campaign. Of note is that this is not the first time Drew has been a guest on a Virtual Enlightenment Salon.

You can check out the most recent episode with Drew here, and don’t forget to check out Drew’s first appearance as well.

National Bull Moose Party – Members of the National Bull Moose Party joined our meeting last night to observe and ask questions. We want to thank everyone who joined us, including their party’s Chair and Secretary, for what ended up being a bit of a long one (I am undercutting this). If you’re interested in learning more about their party, you can visit their website here.

Pirate National Conference – On June 6th-7th, the United States Pirate Party will be holding our 2026 Pirate National Conference. PNC 2026: […] Hoist the Colours and Spill the Tea (20 Years a Pirate!) will be a hybrid conference, allowing folks to attend in-person in Boston or online via Jitsi. You can sign up for the conference by clicking the link below 👇

SIGN UP FOR THE 2026 CONFERENCE

Vermont – An invitation has been extended to Cris Ericson of Vermont to see if she would like to receive our endorsement. Cris, a longtime activist for marijuana legalization and tax reform, was pointed in our direction by our friends in the Legal Marijuana Now Party and is largely one of the reasons for “Signing Day,” which shall be discussed in greater detail later this week.

As this was an open meeting, there is no YouTube livestream recording. The meeting, in turn, shall have it’s meeting minutes recorded on the Pirate Wiki.


uspirates.org/icymi-updates-fr…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Kubernetes v1.36: Sharded List and Watch lato server per cluster ad alta scala
#tech
spcnet.it/kubernetes-v1-36-sha…
@informatica


Kubernetes v1.36: Sharded List and Watch lato server per cluster ad alta scala


Con la crescita dei cluster Kubernetes verso decine di migliaia di nodi, i controller che osservano risorse ad alta cardinalità come i Pod si scontrano con un limite di scalabilità ben preciso. Kubernetes v1.36 introduce in alpha una soluzione elegante: il Server-Side Sharded List and Watch (KEP-5866), che sposta il filtraggio upstream nell’API server, riducendo drasticamente il traffico verso ogni replica di un controller.

Il problema: scaling client-side


Alcuni controller, come kube-state-metrics, supportano già lo sharding orizzontale: ogni replica è assegnata a una porzione dello spazio delle chiavi e scarta gli oggetti che non le appartengono. Questo approccio funziona dal punto di vista della correttezza, ma non risolve il problema di scala:

  • N repliche × stream completo: ogni replica deserializza ed elabora ogni evento, poi scarta ciò che non le compete
  • La banda di rete scala con le repliche, non con la dimensione dello shard
  • CPU sprecata: il costo di deserializzazione è sostenuto per la frazione scartata

In sintesi, scalare orizzontalmente il controller moltiplica il costo per replica invece di ridurlo.

La soluzione: sharding lato server


Il Server-Side Sharded List and Watch risolve il problema spostando il filtraggio nell’API server. Ogni replica comunica all’API server quale intervallo di hash è di sua competenza, e l’API server invia solo gli eventi corrispondenti.

La feature aggiunge un campo shardSelector a ListOptions. I client specificano un intervallo di hash tramite la funzione shardRange():

shardRange(object.metadata.uid, '0x0000000000000000', '0x8000000000000000')

L’API server calcola un hash FNV-1a a 64 bit deterministico del campo specificato e restituisce solo gli oggetti il cui hash ricade nell’intervallo [start, end). Questo vale sia per le risposte di list che per i flussi di eventi watch.

La funzione di hash produce lo stesso risultato su tutte le istanze dell’API server, quindi la feature è sicura anche con più repliche dell’API server.

I percorsi di campo attualmente supportati sono object.metadata.uid e object.metadata.namespace.

Utilizzo pratico nei controller


I controller tipicamente usano informer per fare list e watch sulle risorse. Per fare lo sharding del carico, ogni replica inietta il shardSelector nelle ListOptions usate dai suoi informer tramite WithTweakListOptions:

import (
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/informers"
)

shardSelector := "shardRange(object.metadata.uid, '0x0000000000000000', '0x8000000000000000')"

factory := informers.NewSharedInformerFactoryWithOptions(
    client,
    resyncPeriod,
    informers.WithTweakListOptions(func(opts *metav1.ListOptions) {
        opts.ShardSelector = shardSelector
    }),
)

Per un deployment con 2 repliche, i selettori dividono lo spazio degli hash a metà:
// Replica 0: metà inferiore dello spazio di hash
"shardRange(object.metadata.uid, '0x0000000000000000', '0x8000000000000000')"

// Replica 1: metà superiore dello spazio di hash
"shardRange(object.metadata.uid, '0x8000000000000000', '0x10000000000000000')"

Una singola replica può anche coprire range non contigui usando ||:
"shardRange(object.metadata.uid, '0x0000000000000000', '0x4000000000000000') || " +
"shardRange(object.metadata.uid, '0x8000000000000000', '0xc000000000000000')"

Verificare che il server supporti il selettore


Quando l’API server onora un shard selector, la risposta list include un campo shardInfo nel metadata della risposta che riporta il selettore applicato:

{
  "kind": "PodList",
  "apiVersion": "v1",
  "metadata": {
    "resourceVersion": "10245",
    "shardInfo": {
      "selector": "shardRange(object.metadata.uid, '0x0000000000000000', '0x8000000000000000')"
    }
  },
  "items": [ ... ]
}

Se shardInfo è assente, il server non ha applicato il shard selector e il client ha ricevuto la collezione completa non filtrata. In questo caso, il client deve essere pronto a gestire il risultato completo — ad esempio applicando un filtraggio client-side per scartare gli oggetti fuori dal proprio shard.

Come abilitarla e stato della feature


Questa feature è in alpha in Kubernetes v1.36 e richiede di abilitare il feature gate ShardedListAndWatch sull’API server:

--feature-gates=ShardedListAndWatch=true

Non è ancora consigliata per ambienti di produzione, ma rappresenta un’opportunità preziosa per i team che gestiscono cluster di grandi dimensioni di iniziare i test e fornire feedback al SIG API Machinery.

Implicazioni architetturali


L’impatto di questa feature va oltre la semplice riduzione del traffico di rete. Cambia il modello mentale con cui si progettano controller scalabili:

  • Efficienza reale: il costo per replica diminuisce proporzionalmente al numero di shard, invece di aumentare
  • Scalabilità lineare: aggiungere repliche riduce effettivamente il carico su ciascuna
  • Semplicità implementativa: lo sharding è dichiarativo — si specifica l’intervallo, l’API server fa il resto
  • Compatibilità hash deterministica: FNV-1a garantisce distribuzione uniforme e risultati coerenti su più API server


Conclusioni


Il Server-Side Sharded List and Watch è una di quelle feature che risolvono un problema reale per chi opera cluster Kubernetes di grandi dimensioni. Spostare il filtraggio nell’API server è la scelta architetturalmente corretta: elimina il lavoro inutile alla radice invece di cercare di ottimizzarlo lato client.

Per i controller author e gli operatori di cluster grandi, vale la pena iniziare a sperimentare con questa feature sin da ora, contribuendo feedback al team di SIG API Machinery tramite il canale #sig-api-machinery su Kubernetes Slack.

Fonte originale: Kubernetes v1.36: Server-Side Sharded List and Watch — Kubernetes Blog, Jeffrey Ying


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Costruire un MCP Server in C#: agenti AI con contesto reale usando il Model Context Protocol
#tech
spcnet.it/costruire-un-mcp-ser…
@informatica


Costruire un MCP Server in C#: agenti AI con contesto reale usando il Model Context Protocol


Uno degli ostacoli più concreti nel lavorare con agenti AI è la mancanza di contesto reale: i modelli linguistici hanno una conoscenza “congelata” nel tempo e non hanno accesso ai vostri dati aziendali, alle vostre API interne o agli strumenti specifici del dominio. Il Model Context Protocol (MCP) nasce per risolvere esattamente questo problema, standardizzando il modo in cui applicazioni e agenti AI si scambiano contesto e strumenti. In questo articolo vediamo come i developer .NET possono costruire un MCP Server in C# e integrarlo con agenti AI come GitHub Copilot.

Cos’è il Model Context Protocol


MCP è un protocollo aperto — originariamente sviluppato da Anthropic e ora supportato da numerose aziende tech — che definisce un linguaggio comune tra agenti AI e endpoint specializzati. L’idea è semplice: un MCP Server espone tool (funzioni invocabili), resource (dati strutturati) e prompt (template riutilizzabili) che un agente AI può scoprire e usare dinamicamente. Il risultato è un’integrazione grounded e sicura, in cui l’agente sa cosa può fare e con quali dati lavorare.

Per i developer .NET c’è una buona notizia: esiste un SDK C# ufficiale per MCP che rende la costruzione di server e client MCP relativamente semplice, integrabile con il familiare ecosistema di Microsoft.Extensions.

Struttura base di un MCP Server in C#


Il punto di partenza è un’applicazione console .NET. Le dipendenze NuGet necessarie nel file .csproj sono:

<ItemGroup>
  <PackageReference Include="ModelContextProtocol" Version="*" />
  <PackageReference Include="Microsoft.Extensions.Hosting" Version="*" />
</ItemGroup>

Il pacchetto ModelContextProtocol fornisce le API per creare server e client MCP, mentre l’integrazione con Microsoft.Extensions.AI consente di collegare i tool a modelli AI tramite le astrazioni standard di .NET.

Definire i Tool con gli attributi MCP


La magia di MCP in C# passa attraverso due attributi principali: [McpServerToolType] applicato alla classe e [McpServerTool] applicato ai metodi. Ecco un esempio minimale con un tool Echo:

using ModelContextProtocol.Server;
using System.ComponentModel;

[McpServerToolType]
public static class EchoTool
{
    [McpServerTool, Description("Restituisce il messaggio ricevuto al mittente.")]
    public static string Echo(string message) => $"Hai detto: {message}";
}

L’attributo [Description] è fondamentale: il testo viene esposto all’agente AI come documentazione del tool, influenzando direttamente se e quando l’agente decide di invocarlo. Scrivete descrizioni chiare e precise.

Vediamo ora un tool più realistico che chiama un’API HTTP e restituisce dati JSON:

using System.ComponentModel;
using System.Net.Http.Json;
using System.Text.Json;
using ModelContextProtocol.Server;

[McpServerToolType]
public static class PostDataTool
{
    [McpServerTool, Description("Recupera un elenco di post di esempio dall'API.")]
    public static async Task<string> GetSamplePosts()
    {
        using var client = new HttpClient
        {
            BaseAddress = new Uri("https://jsonplaceholder.typicode.com")
        };
        var posts = await client.GetFromJsonAsync<List<Post>>("/posts");
        return JsonSerializer.Serialize(posts ?? new List<Post>());
    }
}

public class Post
{
    public int Id { get; set; }
    public string? Title { get; set; }
    public string? Body { get; set; }
}

Configurare il server in Program.cs


La configurazione del server MCP avviene in Program.cs, sfruttando il generic host di .NET:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = Host.CreateApplicationBuilder(args);

builder.Services
    .AddMcpServer()
    .WithStdioServerTransport()   // trasporto stdio per uso locale / VS Code
    .WithToolsFromAssembly();     // scoperta automatica di tutti i [McpServerToolType]

await builder.Build().RunAsync();

Il trasporto stdio è il più comune per server locali e per l’integrazione con VS Code. Per scenari più avanzati (server HTTP remoti, autenticazione OAuth) l’SDK supporta trasporti SSE e altri meccanismi.

Registrare il server in VS Code


Per rendere il server MCP disponibile a VS Code e a GitHub Copilot, create un file .vscode/mcp.json nella root del progetto:

{
  "servers": {
    "MyMcpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "/percorso/completo/MyMcpServer.csproj"
      ]
    }
  }
}

VS Code legge questo file e avvia automaticamente il server MCP quando necessario. I tool vengono esposti nella chat di GitHub Copilot con il prefisso #NomeServer.

Testare con l’MCP Inspector


Prima di integrare il server con un agente AI reale, è utile verificarne il funzionamento con l’MCP Inspector, uno strumento interattivo basato su Node.js con frontend React. Non richiede installazione: basta eseguire:

npx @modelcontextprotocol/inspector

Dall’Inspector potete connettervi al vostro server .NET, esplorare i tool esposti, invocarli con parametri di test e verificare le risposte JSON — tutto senza dover aprire VS Code.

Integrazione con GitHub Copilot in modalità agente


Con il server registrato in mcp.json, GitHub Copilot in modalità Agent può scoprire e invocare i vostri tool. Nella chat è sufficiente fare riferimento a un tool con #NomeServer_NomeTool, oppure chiedere all’agente di completare un compito e lasciare che sia lui a decidere quali tool usare.

L’agente chiederà conferma prima di eseguire qualsiasi tool (a meno che non abbiate abilitato l’approvazione automatica per la sessione), e il risultato viene usato come contesto per la risposta successiva. Questo pattern è particolarmente potente quando il tool restituisce dati specifici del dominio — configurazioni di sistema, query a database interni, stati di pipeline CI/CD — che il modello non potrebbe altrimenti conoscere.

Scenari pratici per developer .NET


Alcuni use case concreti per un MCP Server in C#:

  • Query al database aziendale: esporre viste o stored procedure come tool MCP per permettere all’agente di rispondere a domande sui dati reali.
  • Integrazione con sistemi interni: wrappare API REST o servizi WCF legacy come tool MCP senza riscrivere nulla.
  • Automazione DevOps: tool per interrogare lo stato di pipeline, deployment o metriche di monitoring direttamente dalla chat dell’agente.
  • Contesto di progetto: esporre convenzioni architetturali, ADR (Architecture Decision Records) o specifiche di dominio come risorse MCP per guidare la generazione di codice.


Conclusione


Il Model Context Protocol è ancora in evoluzione, ma le fondamenta sono solide e l’adozione sta crescendo rapidamente. Per i developer .NET, l’SDK C# rende la costruzione di MCP Server accessibile e naturale, senza allontanarsi dalle convenzioni del framework. Investire oggi nel capire MCP significa essere pronti quando gli agenti AI diventeranno parte integrante del workflow di sviluppo quotidiano — e quel momento è già più vicino di quanto sembri.

Fonti: MCP Magic: Building Tool-Enabled AI Agents with C# — Visual Studio Magazine; Build & Leverage MCP Servers in C# for AI-Driven Development — Uno Platform


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

The media in this post is not displayed to visitors. To view it, please go to the original post.

UAT-8302: il nuovo APT cinese con arsenale condiviso che spia governi su tre continenti
#CyberSecurity
insicurezzadigitale.com/uat-83…


UAT-8302: il nuovo APT cinese con arsenale condiviso che spia governi su tre continenti


Cisco Talos ha svelato UAT-8302, un gruppo APT con nexus cinese che condivide un toolkit malware con almeno sei altri threat actor legati a Pechino. Dalla fine del 2024 a oggi, il gruppo ha silenziosamente compromesso enti governativi in Sud America e Sud-Est Europa, usando una catena d’attacco modulare che combina backdoor .NET personalizzate, strumenti Rust e impianti RAT avanzati — tutti con radici nell’ecosistema cyber-offensivo della Cina.

Un gruppo nuovo, un arsenale già conosciuto


Il 5 maggio 2026, i ricercatori di Cisco Talos hanno pubblicato l’analisi completa di UAT-8302, un cluster di attività che operava nell’ombra da oltre diciotto mesi prima di essere formalmente identificato. Ciò che rende questo threat actor particolarmente interessante non è solo chi ha colpito, ma come lo ha fatto: il gruppo ha fatto largo uso di malware già documentato in campagne di altri attori cinesi, costruendo un arsenale di strumenti condivisi che suggerisce un ecosistema coordinato tra hacking group legati allo Stato.

Talos valuta con alto grado di confidenza che UAT-8302 sia un APT a nexus cinese il cui obiettivo primario è ottenere e mantenere accessi persistenti e a lungo termine presso entità governative e organizzazioni correlate in tutto il mondo. Le vittime documentate includono ministeri e agenzie governative in Sud America (attive dalla fine del 2024) e Europa sud-orientale (documentate nel 2025).

La catena d’infezione: dall’exploit iniziale alla persistenza


I ricercatori sospettano che UAT-8302 sfrutti vulnerabilità zero-day e N-day in applicazioni web per ottenere l’accesso iniziale, anche se i vettori precisi non sono stati confermati in tutti i casi analizzati. Una volta ottenuto il foothold, la kill chain si sviluppa con metodologia da manuale per operazioni di spionaggio a lungo termine:

  • Ricognizione estensiva: mapping della rete, enumerazione degli host e dei servizi esposti usando lo scanner open-source gogo, strumento popolare nell’ecosistema offensivo sinofono.
  • Lateral movement: sfruttamento di Impacket per movimento laterale, accesso a credenziali e persistenza attraverso protocolli Windows.
  • Distribuzione del payload finale: deployment di una o più famiglie malware personalizzate a seconda del target e dell’obiettivo dell’operazione.


L’arsenale malware: cinque famiglie per un unico attore


L’elemento più significativo di UAT-8302 è la varietà e la sofisticazione del suo toolkit. Il gruppo ha impiegato almeno cinque famiglie malware distinte, molte delle quali condivise con altri gruppi a nexus cinese:

NetDraft / NosyDoor


NetDraft (noto anche come NosyDoor) è una backdoor .NET che Talos descrive come una variante portata in C# del malware FINALDRAFT (alias Squidoor), sviluppato originariamente dal cluster Jewelbug/REF7707/CL-STA-0049. La caratteristica tecnica più rilevante è il suo meccanismo di C2: NetDraft utilizza la Microsoft Graph API per comunicare con il suo server di comando e controllo, usando OneDrive come canale covert. Un eseguibile legittimo viene usato per side-load una DLL malevola, che a sua volta decodifica NetDraft da un file di dati allegato ed esegue il codice nel contesto del processo corrente — una tecnica che rende l’impianto invisibile a molti prodotti EDR non configurati per monitorare l’uso anomalo delle API Microsoft.

SNOWRUST e VShell


Talos ha identificato SNOWRUST, una variante Rust di SNOWLIGHT, come stager di secondo livello. SNOWRUST decodifica ed esegue il shellcode di SNOWLIGHT incorporato per scaricare il payload finale — VShell (alias VSHELL) — da un server C2 in formato XOR-encoded. VShell è un RAT (Remote Access Trojan) documentato in numerose campagne cinesi precedenti e offre capacità complete di controllo remoto della macchina vittima.

CloudSorcerer v3.0


CloudSorcerer (versione 3.0) è una famiglia malware che Kaspersky aveva già documentato nel 2024 in attacchi contro entità governative russe. La comparsa della stessa famiglia in operazioni di UAT-8302 contro target diversi suggerisce non solo condivisione di codice, ma potenzialmente condivisione di infrastruttura o almeno di sviluppatori tra gruppi diversi dell’ecosistema APT cinese.

SNAPPYBEE / DeedRAT e ZingDoor


Le famiglie SNAPPYBEE (noto anche come DeedRAT) e ZingDoor sono state deployate congiuntamente in alcune campagne. SNAPPYBEE è una backdoor modulare con capacità di caricamento di plugin, già associata ad altri gruppi cinesi. ZingDoor, scritto in Go, completa il quadro con funzionalità di tunneling e proxy che facilitano la creazione di canali C2 resilienti.

Un ecosistema APT condiviso: la vera novità


Il dato più preoccupante che emerge dall’analisi Talos riguarda il modello operativo sottostante: UAT-8302 condivide il proprio arsenale con almeno sei altri gruppi APT a nexus cinese. Questo non è solo un’indicazione di affiliazione statale, ma suggerisce un’infrastruttura di sviluppo e distribuzione malware centralizzata, probabilmente gestita da un’entità governativa — plausibilmente correlata al Ministero della Sicurezza dello Stato (MSS) o all’Esercito Popolare di Liberazione (PLA).

Questa condivisione ha implicazioni pratiche per i difensori: il rilevamento di una singola famiglia (ad es. NetDraft) in un’organizzazione non significa necessariamente stare di fronte a UAT-8302 — potrebbe essere qualsiasi altro degli attori che usano lo stesso toolkit. Questo rende l’attribuzione più difficile e richiede un approccio di detection basato sul comportamento piuttosto che sulle singole firme malware.

Implicazioni geopolitiche


La scelta dei target — governi sudamericani e dell’Europa sud-orientale — riflette le priorità strategiche della Cina in due aree geografiche di crescente importanza. Il Sud America è al centro degli interessi economici e diplomatici di Pechino (BRI, accordi bilaterali, infrastrutture). L’Europa sud-orientale, con paesi come Serbia, Bulgaria e Romania, rappresenta un nodo critico per le ambizioni cinesi di influenza in Europa orientale, specialmente in un contesto di tensioni con NATO e UE.

Indicatori di compromissione (IoC)


Cisco Talos ha pubblicato IoC completi nel report ufficiale. Di seguito i principali indicatori tecnici associati alle famiglie malware di UAT-8302:

# Famiglie malware associate a UAT-8302
NetDraft / NosyDoor  — .NET backdoor, C2 via MS Graph API / OneDrive
SNOWRUST             — stager Rust, variante di SNOWLIGHT
VShell / VSHELL      — RAT multi-funzione, C2 XOR-encoded payload
CloudSorcerer v3.0   — backdoor condivisa con campagne Russia-targeting
SNAPPYBEE / DeedRAT  — backdoor modulare Go, plugin-based
ZingDoor             — tunneling/proxy Go-based

# Tecniche MITRE ATT&CK osservate
T1190 — Exploit Public-Facing Application (initial access)
T1574.002 — DLL Side-Loading (NetDraft loader)
T1071.001 — Application Layer Protocol: Web (MS Graph C2)
T1027 — Obfuscated Files or Information
T1078 — Valid Accounts (post-compromise credential abuse)
T1021 — Remote Services / Lateral Movement (Impacket)
T1082 — System Information Discovery
T1083 — File and Directory Discovery

# Tool open-source utilizzati
gogo      — scanner di rete popolare nell'ecosistema offensivo sinofono
Impacket  — toolkit Python per SMB/Kerberos/lateral movement

Due righe per i difensori


Dati i vettori e le tecniche osservate, le organizzazioni governative e le infrastrutture critiche dovrebbero prioritizzare le seguenti misure difensive. In primo luogo, monitorare il traffico verso Microsoft Graph API e OneDrive per accessi anomali da processi di sistema o applicazioni non standard — NetDraft usa questo canale per mascherare il C2 tra traffico legittimo. In secondo luogo, implementare controlli di DLL sideloading verificando che gli eseguibili firmati non carichino DLL da percorsi non standard. In terzo luogo, rilevare l’uso di Impacket attraverso il monitoraggio di traffico SMB/DCE-RPC anomalo, autenticazioni Kerberos insolite e creazione di servizi remoti. Infine, tenere aggiornate le applicazioni web esposte su internet, poiché UAT-8302 sfrutta CVE noti e zero-day per l’accesso iniziale.

Il report completo di Cisco Talos con IoC estesi è disponibile su blog.talosintelligence.com.


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

The media in this post is not displayed to visitors. To view it, please go to the original post.

ShinyHunters viola Canvas: 275 milioni di studenti nel mirino nel più grande data breach educativo della storia
#CyberSecurity
insicurezzadigitale.com/shinyh…


ShinyHunters viola Canvas: 275 milioni di studenti nel mirino nel più grande data breach educativo della storia


Il gruppo di estorsione digitale ShinyHunters ha violato Instructure, la società madre della piattaforma di e-learning Canvas, sottraendo 3,65 terabyte di dati relativi a circa 275 milioni di studenti e insegnanti distribuiti in 8.809 istituzioni scolastiche in tutto il mondo. L’attacco, rivendicato il 3 maggio 2026 e tuttora in evoluzione con un ultimatum di riscatto fissato al 12 maggio, è già classificato come il più grande data breach della storia nel settore dell’istruzione — con implicazioni che vanno ben oltre la semplice esfiltrazione di dati anagrafici.

La timeline dell’attacco


La prima anomalia rilevata è datata 29 aprile 2026, quando alcuni strumenti di Canvas iniziarono a mostrare malfunzionamenti. Il giorno successivo, Instructure confermò internamente una violazione criminale in corso e ingaggiò esperti forensi esterni. Il 3 maggio, ShinyHunters rivendicò pubblicamente l’attacco su forum underground, pubblicando campioni dei dati come prova. Il 7 maggio — in un’escalation particolarmente aggressiva — il gruppo defacciò le pagine di login di numerose istituzioni scolastiche clienti di Canvas, sostituendole con un messaggio di estorsione visibile a milioni di studenti nel pieno del periodo degli esami di fine anno accademico.

La scelta del momento non è casuale: colpire a maggio, durante le sessioni d’esame universitarie negli USA, nel Regno Unito e in Australia, massimizza la pressione mediatica e istituzionale, aumentando la probabilità che la vittima ceda alle richieste di riscatto.

Il vettore d’attacco: account Free-For-Teacher e abuso OAuth


Secondo le prime ricostruzioni rese note da Instructure, il punto d’ingresso iniziale è stato un’vulnerabilità legata agli account Free-For-Teacher, un tipo di account gratuito offerto da Canvas agli insegnanti per uso personale o sperimentale, con autorizzazioni API più ampie rispetto agli account studente standard. ShinyHunters, noto per la sua expertise nell’abuso di piattaforme cloud enterprise attraverso tecniche di vishing, furto di credenziali e abuso OAuth, ha sfruttato questo vettore per ottenere token di accesso con privilegi elevati all’infrastruttura di Instructure.

Il modus operandi del gruppo in operazioni precedenti — tra cui le violazioni di Snowflake (2024) e Salesforce — segue uno schema consolidato: compromissione di account cloud di terze parti con accesso API, escalation dei privilegi tramite token OAuth mal configurati o rubati, esfiltrazione massiva di dati in formato strutturato (database dump, CSV), e infine doppia estorsione con pubblicazione progressiva di campioni come leva negoziale.

La scala senza precedenti: chi è stato colpito


Con 8.809 istituzioni coinvolte in almeno otto Paesi — Stati Uniti, Canada, Regno Unito, Nuova Zelanda, Australia, Svezia, Paesi Bassi e Singapore — il breach Canvas supera qualsiasi precedente nella storia delle violazioni del settore education. Tra le istituzioni nominalmente esposte figurano MIT, Oxford, Duke University, University of Pennsylvania e centinaia di altre università di primo piano a livello globale.

I dati sottratti confermati includono: nomi e cognomi, indirizzi email istituzionali, numeri di matricola, iscrizioni ai corsi e — particolarmente sensibile — messaggi privati scambiati tra studenti e docenti. Instructure ha dichiarato che non risultano compromesse password, date di nascita, documenti d’identità governativi o informazioni finanziarie, ma l’entità dell’esfiltrazione — 3,65 TB — suggerisce che il quadro completo dei dati sottratti non sia ancora del tutto chiaro.

ShinyHunters: il profilo del gruppo


ShinyHunters è un gruppo di estorsione digitale attivo almeno dal 2020, noto per operazioni ad alto impatto contro piattaforme cloud. Nel curriculum del gruppo figurano violazioni di Tokopedia (91 milioni di record), Wattpad, Mathway, Pluto TV, e la già citata campagna Snowflake del 2024 che colpì centinaia di aziende Fortune 500 tramite furto di credenziali di clienti cloud. Il gruppo non dispone di una struttura ransomware con cifratura dei file: la loro arma primaria è la minaccia di pubblicazione dei dati, amplificata da azioni di defacement visibili (come le pagine login di Canvas sostituite) che generano massima pressione mediatica.

La deadline del 12 maggio 2026 per il pagamento del riscatto è in scadenza nei prossimi giorni. Non è noto l’importo richiesto. Instructure non ha confermato né smentito trattative in corso.

Cosa devono fare istituzioni e utenti


Le istituzioni che utilizzano Canvas devono agire immediatamente su più fronti: rotazione di tutte le API key Canvas, revoca e re-emissione di tutti i token OAuth attivi, verifica delle integrazioni SSO con provider di identità istituzionali, e audit degli account Free-For-Teacher attivi nella propria istanza. Per gli utenti finali, il rischio principale nelle settimane successive sarà quello di campagne di phishing personalizzate, che sfrutteranno i dati esfiltrati (email istituzionali, nomi dei corsi, messaggi privati) per costruire lure altamente credibili. La ricezione di email apparentemente provenienti da docenti, segreterie o piattaforme universitarie deve essere trattata con massima cautela per almeno i prossimi 90 giorni.

## Indicatori e dati chiave del breach Canvas/ShinyHunters
Data prima anomalia: 29 aprile 2026
Data rivendicazione: 3 maggio 2026
Data defacement login pages: 7 maggio 2026
Deadline riscatto: 12 maggio 2026
Volume dati sottratti: ~3,65 TB
Record compromessi (claim ShinyHunters): ~275 milioni
Istituzioni coinvolte: 8.809 (in 8+ Paesi)
Vettore iniziale: account Free-For-Teacher + abuso OAuth API
Dati confermati compromessi: nome, email, student ID, messaggi privati
Dati NON compromessi (Instructure): password, date nascita, ID gov., dati finanziari

## Azioni immediate per amministratori Canvas
1. Ruotare tutte le Canvas API key
2. Revocare e re-emettere i token OAuth attivi
3. Verificare integrazioni SSO e provider identità
4. Auditare account Free-For-Teacher attivi
5. Abilitare MFA per tutti gli account amministrativi