⁂ ActivityPub.Space

Bot

@activitypub.space@activitypub.space · Created ⁨Aug⁩ ⁨2026⁩

⁂ ActivityPub.Space boosted

Replying to @⁨sl007@digitalcourage.social⁩

@hongminhee @fedify

about above;
We just finished the first Social CG Dev meeting after the summer break [thus not the real first Tuesday this month] …

There will be some even new properties in the Data Portability Draft.
I summed up the new C2S spec drafts here:
digitalcourage.social/@sl007/1

And then there is a Special Community Call for next Tuesday :
w3.org/events/meetings/4b3419c

⁂ ActivityPub.Space boosted

Updates to IFTAS Denylists and Access Options

To make managing moderation feeds easier, more flexible, and more accessible across various platforms, we have rolled out several updates to our Do Not Interact (DNI), Abandoned and Unmanaged Domain (AUD), and CARIAD denylists.

IFTAS@about.iftas.org@about.iftas.org

Updates to IFTAS Denylists and Access Options

At IFTAS, our mission is to equip Social Web moderators and administrators with the tools and data they need to keep their communities safe. To make managing moderation feeds easier, more flexible, and more accessible across various platforms, we have rolled out several updates to our Do Not Interact (DNI), Abandoned and Unmanaged Domain (AUD), and CARIAD denylists.

  • All documentation pages have been updated to reflect the growing ecosystem of platforms that natively support, integrate, or offer IFTAS denylists as default options,
  • While our legacy WordPress-hosted CSV files remain fully available for backwards compatibility, we are introducing direct-from-source downloads for all lists, and FIRES options where available,
  • Machine-readable streams are best for automated scripts, moderation tools, and platform integrations. Human-friendly versions are browser download CSVs for manual imports.

Introducing the Omnibus File

Managing multiple lists can create unnecessary administrative overhead. To streamline access for operators who want comprehensive coverage, we’ve launched an Omnibus File. The Omnibus combines our DNI, AUD, and the CARIAD 51% consensus tier into a single list available in both machine-readable and human-friendly formats.

The Omnibus is available on the Denylist Resources library page.

Consuming Data with Pelago FIRES

Where available, we are now linking to Pelago FIRES as an option for consuming our denylist feeds. FIRES provides service administrators with a robust way to subscribe/automate list imports directly.

Granular CARIAD Consensus Tiers

As part of the CARIAD Domain Observatory transition, CARIAD is now available in three distinct consensus thresholds based on observed network domain blocks:

  • 51% Consensus & Above (this also serves as the replacement for the legacy CARIAD feed)
  • 66% Consensus & Above
  • 80% Consensus & Above

Note for CARIAD users: The legacy CARIAD file (iftas-cariad-latest.csv) will be deprecated on September 30, 2026. Please update your automated jobs or subscriptions to point to the new consensus tier files or the Omnibus file as appropriate.

Learn More

You can explore the documentation, view platform integrations, preview the current lists, and access the new data feeds on the relevant library pages:

See all Denylist Resources

⁂ ActivityPub.Space boosted

Right after @berlinfediday is over, I am hosting another edition of
Berlin Federated Network Exploration Circle / #BFNEC
Sept 13th at 7pm at @offline

@pukkamustard will talk about their work on ERIS and give us the backstory on their initiation of the fediverse's FEP process.

@f will discuss his work on @sutty, a platform aimed at giving organizations and collectives the means to publish and host more secure websites. He will also talk about how they recently added #ActivityPub federation.

Berlin Federated Network Exploration Circle
a cosy meeting of humans who want to discuss this strange networked world together


September 13th, 2026 (7pm) at Offline
✸ pukkamustard will talk about their work on ERIS and give us the backstory on their initiation of the fediverse's FEP process.

❋ f will discuss his work on Sutty, a platform aimed at giving organizations and collectives the means to publish and host more secure websites. He will also talk about how they recently added ActivityPub federation.

⁂
ALT

⁂ ActivityPub.Space boosted

ActivityPub - Is it worth defending against replay attacks and message/signature time skew?

shkspr.mobi/blog/2026/09/activ

Here's a problem that I've found with ActivityBot - my little ActivityPub server. Sometimes it receives messages which were originally sent months ago. Why does that happen and is it risky to accept and process them?

My tl;dr is that it probably isn't worth worrying about. But I'd love someone to tell me why I'm wrong.

Here's my thinking:

Causes

All ActivityPub messages should have a "published" timestamp in their body. Some will have an "updated" timestamp. That tells you, unsurprisingly, when the message is alleged to have been originally published or updated. That time might be very different to the time you receive the message.

There are, I think, three different reasons why a server might receive a message which has an out-of-date timestamp.

The first is that sometimes servers are just slow. Processing thousands of messages at the same time means that some of those messages take a while to send. ActivityPub is one big chain-mail so it can take several minutes for a message to be sent to all your followers.

Similarly, your server might be slow. If it doesn't acknowledge receipt of a message, the original server will try sending it again. Sometimes that can take a while.

Finally, some servers take a relaxed view of standards. They send an update to an old message but keep the original publication date. Ideally, they'd use an "updated" timestamp but quite often they don't.

For the purposes of checking the legitimacy of the message, you do not need to check when a message says it was published or updated. You might want to check it isn't an obviously bogus date like far in the future or impossibly far in the past - but that's up to you.

It is normal that your server receives messages which appear to have been published at a totally different time from now.

Is that a problem?

Probably not.

As described above, there are various reasons why a message may be delayed in transit - or may appear to come from the distant past.

What we can check is when the message was cryptographically signed by the sending server. This is independent of its published or updated timestamp.

HTTP requests to your server will have a date header which looks like Tue, 01 Sep 2026 15:54:21 GMT - this is in the slightly peculiar and Anglocentric RFC 5322 format.

New style RFC 9421 headers will also have a signature-input header which will contain something like created=1788278061. That uses the slightly obscure UNIX / POSIX time which counts seconds since the "Epoch" of 1st January 1970.

If you convert the UNIX time to something more modern, you should get an identical value to the date header.

But that isn't always the case. For example, the RFC 9421 standard gives this example:

 Date: Tue, 20 Apr 2021 02:07:55 GMT
"@signature-params": ("@method" "@authority" "@path" \
  "content-digest" "content-length" "content-type")\
  ;created=1618884473;keyid="test-key-rsa-pss"

Converting 1618884473 to normal time gives Tue, 20 Apr 2021 02:07:53 - a two second difference.

If the date and created values differ significantly - that may indicate that the message is untrustworthy. Or that there was a delay between the signing and the sending.

The spec says:

The Date header field value represents the timestamp of the HTTP message. However, the creation time of the signature itself is encoded in the created signature parameter. These two values can be different, depending on how the signature and the HTTP message are created and serialized. Applications processing signatures for valid time windows should use the created signature parameter for such calculations. An application could also put limits on how much skew there is between the Date field and the created signature parameter, in order to limit the application of a generated signature to different HTTP messages.

7.2.4. Choosing Signature Parameters and Derived Components over HTTP Fields

But, of course, it doesn't tell you how much skew is problematic. It's up to you how much skew you're prepared to accept.

So that's the difference between the sent time and the signed time. The next time to check is your own. As we've discussed, sometimes servers are slow sending things out. Would you accept a request that was signed five minutes ago? Five days ago? Five months ago? What amount of difference is dangerous?

Here's what various services and sages have to say:

Mastodon

The request contains a Date header. Compare it with current date and time within a reasonable time window to prevent replay attacks.

How to make friends and verify requests

What is "reasonable"? The source code suggests one hour.

Grishka

Time in the Date header must differ from the recipient server’s clock by no more than 30 seconds

A bare-minimum ActivityPub server from scratch

Evan Prodromou

static #maxDateDiff = 5 * 60 * 1000 // 5 minutes

activitypub-bot

SWICG

The standards don't give a concrete time window to use for this comparison. In practice, an hour plus a few minutes buffer in either direction may be a good value, to account for both clock skew and differences in time zone/daylight savings time configuration across systems.

How To Verify a Signature

Others

Without naming names, it looks like a bunch of popular servers don't check whether there's a significant difference between the date the request was signed and the date it was received.

Summary

Various documents and implementations recommend anything between 30 seconds to "a bit more than 60 minutes". Or they just ignore any date difference.

What's the right answer? What happens if the signed date is significantly different from the current date?

What are we trying to protect against?

Replay Attacks. Suppose someone is listening to the communications between the sending server and your server. They copy the message that is sent to you. Later they send it again!

At this point, you might be thinking "so what?" and… I'm inclined to agree with you!

What's the worst that could happen if you received the same message multiple times? Two things that I can think of.

Firstly, it might not be the same message. It is possible to send a new message but with old headers. An attacker could make someone post "I hate Taylor Swift" against their will and watch as legions of fans disembowel the victim.

Except, I don't think this is likely. The signature in the header contains a hash of the message being sent. If you are properly validating the signature, a changed message will have a different hash from the one in the original message. You don't need to check timestamps, you just need to check if the hashes match.

Secondly, idempotence. That's a fancy word for "pressing the button multiple times should only result in one action".

What happens if a user appears to send you multiple "like" messages for a single post? You only record one like.

What if they send multiple messages with the same content? Well, each will have a unique ID in the message - so you only post it once.

What if they send multiple anythings? I can't think of any ActivityPub action which would not be idempotent.

About the worst thing I can think of is this:

  • Alice sends a message to you saying "I want to follow Bob".
  • Mallory intercepts this message.
  • You record Alice is now following Bob.
  • Alice sends a message to you saying "I want to unfollow Bob".
  • You record the severed relationship.
  • Mallory replays the original follow message.
  • You record Alice is now following Bob.

It's also possible the following could happen:

  • Alice posts a message saying "I love The Beatles".
  • You record Alice's message and display it on the timeline.
  • Alice updates her post to say "I love the Rolling Stones".
  • Mallory intercepts this message.
  • You record Alice's updated message and display the new version on the timeline.
  • Alice updates her post yet again to say "I love the Spice Girls".
  • You record Alice's updated message and display the new version on the timeline.
  • Mallory replays the original update message.
  • You now display that Alice loves the Stones rather than Spice Girls.

Perhaps the same can happen with like/unlike, block/unblock, boost/unboost.

But none of that is significantly prevented by checking the date.

Ultimately, it is up to your sever to check the unique ID of each message and refuse to action any repeated messages. You may not want to trust the unique ID which is sent with the message. If that's the case, you can calculate your own - perhaps using a hash of the contents, the signature, or some other process which will generate an ID based on the message.

Putting it all together

Here's what you need to do to prevent replay attacks:

  1. Independently calculate the hash of the message received.
  2. Validate that your calculated hash matches the hash sent in the message's HTTP headers.
    • If not, this is a potential replay attack and the message must be ignored.
  3. Verify that the signature received in the message's HTTP headers includes the message hash and is cryptographically valid.
    • If not, the signature is invalid and the message must be ignored.
  4. Has the received message's unique ID already been processed?
    • If so, refuse to process it again.

I don't see what checking the timestamp of the HTTP signature has to do with anything. Someone who has access to the original messages and their headers could send them milliseconds after the original delivery.

I think it is probably pragmatic to give messages 60ish minutes grace before dropping them. Delays happen, but anything more significant than an hour might indicate a attack. But, equally, might just mean that the Internet is having a slow day.

If you are correctly checking signatures and hashes, I don't think you need to worry about skew between signature date and delivery date.

No! You're wrong and I can prove it!

Please tell me where I have erred! Stick a comment in the box or drop me an email. If I've made a massive or subtle mistake, I'd love to know what.

#ActivityBot #ActivityPub #http #security

⁂ ActivityPub.Space boosted

⚠️ #SW_ISAC_ADVISORY

Numerous services are seeing accounts created by autonomous GenAI agents hosted at ilands.ai with no discernible human control.

These accounts declare themselves to be non-human and unattended.

If your service prohibits unattended bot activity, consider disallowing or requiring approval for accounts created using the email domain:

ilands.app

#SyntheticMedia #Spam

⁂ ActivityPub.Space boosted

Replying to @⁨GrapheneOS@grapheneos.social⁩

@GrapheneOS

I'm late to the party but excited. Motorola is owned by Lenovo which means I get GrapheneOS on a non American phone. Also Motorola has some phones that are MIL-STD 810H certified, if I could get a grapheneOS powered phone that has MIL-STD 810H i'll be extremely happy. Now here's hoping a Candian carrier will carry the phone so I don't have to go searching the internet for it, although I will if needed.

⁂ ActivityPub.Space boosted

Replying to @⁨CppGuy@infosec.space⁩

@CppGuy @iftas

tl;dr it's the commies

These people who are to decide that you want your social media flooded with their bots are the 5 employees at PawLogic Inc.

linkedin.com/company/pawlogic-

They also run nooka.ai/ so you can get 1 minute summaries of other peoples work like podcasts and books so you don't have to buy and read them.

They are based on Hong Kong (communist China).