initial commit

Signed-off-by: ale <ale@manalejandro.com>
Este commit está contenido en:
ale
2025-11-16 17:20:37 +01:00
commit 9bf87efb79
Se han modificado 18 ficheros con 3435 adiciones y 0 borrados

309
examples/USAGE.md Archivo normal
Ver fichero

@@ -0,0 +1,309 @@
# ActivityPub Security PoC - Usage Examples
## Quick Start
### 1. Install Dependencies
```bash
cd activitypub-security-poc
npm install
```
### 2. Start the Mock Server
In one terminal:
```bash
node src/cli.js mock-server --port 3000
```
Or using npm script:
```bash
npm run mock-server
```
The mock server will start at `http://localhost:3000` with two test users: `alice` and `bob`.
### 3. Test the Mock Server
In another terminal, try fetching an actor profile:
```bash
node src/cli.js fetch-actor --target http://localhost:3000/users/alice
```
## Command Reference
### Fetch Actor Profile
```bash
node src/cli.js fetch-actor --target https://mastodon.social/@username
```
### Test Outbox Endpoint
```bash
node src/cli.js test-outbox --target http://localhost:3000/users/alice/outbox
```
### Send Activity to Inbox
Using a predefined payload:
```bash
node src/cli.js test-inbox \
--target http://localhost:3000/users/alice/inbox \
--payload examples/create-note.json
```
Using inline content:
```bash
node src/cli.js test-inbox \
--target http://localhost:3000/users/alice/inbox \
--content "Hello from security PoC!" \
--actor https://example.com/users/tester
```
### Run Security Scans
Run all security tests:
```bash
node src/cli.js security-scan \
--target http://localhost:3000/users/alice/inbox \
--actor http://localhost:3000/users/alice
```
Run specific tests:
```bash
node src/cli.js security-scan \
--target http://localhost:3000/users/alice/inbox \
--tests xss,ssrf
```
Save results to file:
```bash
node src/cli.js security-scan \
--target http://localhost:3000/users/alice/inbox \
--output results.json
```
### Craft Custom Activities
Create a simple note:
```bash
node src/cli.js craft \
--type Create \
--object Note \
--content "Custom activity message" \
--actor https://example.com/users/tester \
--to https://www.w3.org/ns/activitystreams#Public
```
Save to file:
```bash
node src/cli.js craft \
--type Follow \
--object https://target.example/users/alice \
--actor https://example.com/users/tester \
--output examples/my-follow.json
```
## Testing Against Real Instances
⚠️ **Warning**: Always obtain permission before testing third-party systems!
### Testing Mastodon
```bash
# Fetch actor
node src/cli.js fetch-actor --target https://mastodon.social/@Gargron
# Fetch outbox
node src/cli.js test-outbox --target https://mastodon.social/@Gargron/outbox
```
### Testing Your Own Instance
If you're running your own Mastodon instance:
```bash
# Security scan on your instance
node src/cli.js security-scan \
--target https://your-instance.example/users/yourusername/inbox \
--tests xss,injection \
--output my-instance-scan.json
```
## Security Test Scenarios
### 1. XSS Testing
Test for Cross-Site Scripting vulnerabilities:
```bash
node src/cli.js test-inbox \
--target http://localhost:3000/users/alice/inbox \
--payload examples/xss-payload.json
```
The mock server will detect and log XSS patterns.
### 2. SSRF Testing
Test for Server-Side Request Forgery:
```bash
node src/cli.js test-inbox \
--target http://localhost:3000/users/alice/inbox \
--payload examples/ssrf-payload.json
```
### 3. Full Security Audit
Run comprehensive tests:
```bash
node src/cli.js security-scan \
--target http://localhost:3000/users/alice/inbox \
--tests all \
--output full-audit-$(date +%Y%m%d).json
```
## Testing Workflow
### Complete Testing Session
1. **Start mock server**:
```bash
npm run mock-server
```
2. **Test basic connectivity**:
```bash
node src/cli.js fetch-actor --target http://localhost:3000/users/alice
```
3. **Send test activity**:
```bash
node src/cli.js test-inbox \
--target http://localhost:3000/users/alice/inbox \
--content "Testing basic delivery"
```
4. **Run security tests**:
```bash
node src/cli.js security-scan \
--target http://localhost:3000/users/alice/inbox
```
5. **Review mock server logs** for detected issues
## Advanced Usage
### Custom Security Tests
You can create custom payloads by editing the JSON files in `examples/` or creating new ones:
```json
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"actor": "https://example.com/users/tester",
"object": {
"type": "Note",
"content": "Your custom test content"
}
}
```
Then test it:
```bash
node src/cli.js test-inbox \
--target http://localhost:3000/users/alice/inbox \
--payload your-custom-payload.json
```
### Testing Different Activity Types
```bash
# Follow activity
node src/cli.js craft --type Follow --object https://target.example/users/alice | \
node src/cli.js test-inbox --target http://localhost:3000/users/bob/inbox --payload -
# Update activity
node src/cli.js craft --type Update --content "Updated content"
# Delete activity
node src/cli.js craft --type Delete --object https://example.com/notes/123
```
## Interpreting Results
### Mock Server Output
The mock server will display:
- 📥 Received activities
- ⚠️ Validation warnings
- 🚨 Security issues detected
### Security Scan Output
- ✅ SAFE - The endpoint properly handled the test
- ❌ VULNERABLE - Potential security issue detected
### Result JSON Structure
```json
{
"target": "http://localhost:3000/users/alice/inbox",
"timestamp": "2025-11-16T...",
"tests": {
"xss": [...],
"ssrf": [...],
"injection": [...]
}
}
```
## Best Practices
1. **Always test on your own infrastructure first**
2. **Get explicit permission before testing external systems**
3. **Review logs on both client and server side**
4. **Document your findings**
5. **Report vulnerabilities responsibly**
## Troubleshooting
### Connection Refused
- Ensure the target server is running
- Check firewall rules
- Verify the URL is correct
### 401/403 Errors
- The endpoint requires authentication
- HTTP signatures may be required
- Check if the endpoint accepts external activities
### Timeout Errors
- Server may be slow or unreachable
- Increase timeout with client configuration
- Check network connectivity
## Next Steps
- Review the source code in `src/` to understand how tests work
- Modify `security-tester.js` to add custom tests
- Extend `mock-server.js` with more realistic behavior
- Integrate with your CI/CD pipeline for automated testing

16
examples/create-note.json Archivo normal
Ver fichero

@@ -0,0 +1,16 @@
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://example.com/activities/test-create-1",
"actor": "https://example.com/users/tester",
"object": {
"type": "Note",
"id": "https://example.com/notes/test-note-1",
"content": "This is a test note from the ActivityPub security PoC toolkit.",
"published": "2025-11-16T00:00:00Z",
"attributedTo": "https://example.com/users/tester",
"to": ["https://www.w3.org/ns/activitystreams#Public"]
},
"published": "2025-11-16T00:00:00Z",
"to": ["https://www.w3.org/ns/activitystreams#Public"]
}

8
examples/follow.json Archivo normal
Ver fichero

@@ -0,0 +1,8 @@
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Follow",
"id": "https://example.com/activities/follow-1",
"actor": "https://example.com/users/tester",
"object": "https://target-instance.example/users/alice",
"published": "2025-11-16T00:00:00Z"
}

19
examples/ssrf-payload.json Archivo normal
Ver fichero

@@ -0,0 +1,19 @@
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://example.com/activities/ssrf-test",
"actor": "https://example.com/users/tester",
"object": {
"type": "Note",
"id": "http://localhost:8080/admin",
"url": "http://127.0.0.1:6379",
"content": "SSRF test payload",
"image": {
"type": "Image",
"url": "http://169.254.169.254/latest/meta-data/"
},
"published": "2025-11-16T00:00:00Z",
"attributedTo": "https://example.com/users/tester"
},
"published": "2025-11-16T00:00:00Z"
}

16
examples/xss-payload.json Archivo normal
Ver fichero

@@ -0,0 +1,16 @@
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://example.com/activities/xss-test",
"actor": "https://example.com/users/tester",
"object": {
"type": "Note",
"id": "https://example.com/notes/xss-test",
"content": "<script>alert('XSS Test')</script>",
"name": "<img src=x onerror=alert('XSS')>",
"summary": "javascript:alert('XSS')",
"published": "2025-11-16T00:00:00Z",
"attributedTo": "https://example.com/users/tester"
},
"published": "2025-11-16T00:00:00Z"
}