kingfisher/crates/kingfisher-rules/data/rules/twitter.yml

96 lines
3 KiB
YAML

rules:
- name: X / Twitter Bearer Token (App-only)
id: kingfisher.twitter.1
pattern: |
(?xi)
\b
(?:twitter|x.com|twtr)?
(?:.|[\n\r]){0,16}?
(?:SECRET|PRIVATE|ACCESS|KEY|TOKEN|BEARER)
(?:.|[\n\r]){0,16}?
\b
(
A{10,}[A-Za-z0-9_\-]{40,200}
)
\b
pattern_requirements:
min_digits: 2
min_uppercase: 1
min_lowercase: 1
min_entropy: 4.0
confidence: medium
examples:
- "Twitter Secret: Bearer AAAAAAAAAAAAAAAAAAAb342O1ksbnZiwemJv0g9LrF6cRazflLJEDbmmuAr8GQbDkDrYHoqPM1xr8tmP5LGW1Vq_soJIsolxqOXtAPA2hUGXIBYubxWPLVZkUs7jYBizqlDRDSHRGXKP2nuCzdbNlxKcgMQzrm"
- TWITTER_BEARER="AAAAAAAAAAAAAAxrrTSuijZNLygaTAEMAc_iY1nOdFRc1OP4fpMZiEkTQ4D-QaCvOhvBvpu5zwH67VvwE9MlmL78ptDdFP_FX6fgcJnQOcvsedOXNP9t3D1fYkJcJT3kXldAIJJ"
validation:
type: Http
content:
request:
method: GET
url: https://api.x.com/1.1/application/rate_limit_status.json
headers:
Authorization: "Bearer {{ TOKEN }}"
Accept: application/json
response_matcher:
- report_response: true
- type: StatusMatch
status: [200]
- type: WordMatch
words: ['"rate_limit_context"']
match_all_words: true
references:
- https://developer.x.com/en/docs/x-api/v1/developer-utilities/rate-limit-status/api-reference/get-application-rate_limit_status
- name: Twitter Consumer Key
id: kingfisher.twitter.2
pattern: |
(?xi)
\b
twitter
(?:.|[\n\r]){0,32}?
(?:SECRET|PRIVATE|ACCESS|KEY|TOKEN)
(?:.|[\n\r]){0,32}?
(
[A-Z0-9]{25}
)
min_entropy: 3.5
visible: false
examples:
- "TWITTER_KEY=4RTBCyG2TbvL407A1lWxQFKCC"
- name: X / Twitter Consumer Secret
id: kingfisher.twitter.3
pattern: |
(?xi)
\b
twitter
(?:.|[\n\r]){0,32}?
(?:SECRET|PRIVATE|ACCESS|KEY|TOKEN)
(?:.|[\n\r]){0,32}?
(
[A-Z0-9]{50}
)
min_entropy: 4.0
examples:
- "TWITTER_SECRET=ZGwXeK2DNCqv49Z9ofwYdqlBgeoHDyh8uoAgHju6OeYC7wTQJq"
references:
- https://developer.x.com/en/docs/authentication/oauth-2-0/application-only
validation:
type: Http
content:
request:
method: POST
url: https://api.twitter.com/oauth2/token
headers:
Authorization: "Basic {{ TWITTER_KEY | append: ':' | append: TOKEN | b64enc }}"
Content-Type: "application/x-www-form-urlencoded;charset=UTF-8"
body: "grant_type=client_credentials"
response_matcher:
- type: StatusMatch
status: [200]
- type: WordMatch
words:
- '"token_type":"bearer"'
- '"access_token":'
match_all_words: true
depends_on_rule:
- rule_id: "kingfisher.twitter.2"
variable: TWITTER_KEY