telegram.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package rules
  2. import (
  3. "regexp"
  4. "github.com/zricethezav/gitleaks/v8/cmd/generate/secrets"
  5. "github.com/zricethezav/gitleaks/v8/config"
  6. )
  7. func TelegramBotToken() *config.Rule {
  8. // define rule
  9. r := config.Rule{
  10. Description: "Detected a Telegram Bot API Token, risking unauthorized bot operations and message interception on Telegram.",
  11. RuleID: "telegram-bot-api-token",
  12. Regex: regexp.MustCompile(`(?i)(?:^|[^0-9])([0-9]{5,16}:A[a-zA-Z0-9_\-]{34})(?:$|[^a-zA-Z0-9_\-])`),
  13. Keywords: []string{
  14. "telegram",
  15. "api",
  16. "bot",
  17. "token",
  18. "url",
  19. },
  20. }
  21. // validate
  22. validToken := secrets.NewSecret(numeric("8") + ":A" + alphaNumericExtendedShort("34"))
  23. minToken := secrets.NewSecret(numeric("5") + ":A" + alphaNumericExtendedShort("34"))
  24. maxToken := secrets.NewSecret(numeric("16") + ":A" + alphaNumericExtendedShort("34"))
  25. tps := []string{
  26. // variable assignment
  27. generateSampleSecret("telegram", validToken),
  28. // URL containing token
  29. generateSampleSecret("url", "https://api.telegram.org/bot"+validToken+"/sendMessage"),
  30. // object constructor
  31. `const bot = new Telegraf("` + validToken + `")`,
  32. // .env
  33. `API_TOKEN = ` + validToken,
  34. // YAML
  35. `bot: ` + validToken,
  36. // Token with min bot_id
  37. generateSampleSecret("telegram", minToken),
  38. // Token with max bot_id
  39. generateSampleSecret("telegram", maxToken),
  40. }
  41. tooSmallToken := secrets.NewSecret(numeric("4") + ":A" + alphaNumericExtendedShort("34"))
  42. tooBigToken := secrets.NewSecret(numeric("17") + ":A" + alphaNumericExtendedShort("34"))
  43. fps := []string{
  44. // Token with too small bot_id
  45. generateSampleSecret("telegram", tooSmallToken),
  46. // Token with too big bot_id
  47. generateSampleSecret("telegram", tooBigToken),
  48. }
  49. return validate(r, tps, fps)
  50. }