RPKI ROAs and the maxLength Trap
RPKI ROAs and the maxLength Trap
Thesis
A ROA (Route Origin Authorization) signs that an ASN may originate a prefix. The optional maxLength widens which more-specifics are also valid. Broad maxLength (for example /8 ROA with maxLength=24) makes hijacks of punched-out space look RPKI-valid — RFC 9319 warns against that.
Mental model
ROA: ASN 64500 may originate 192.0.2.0/24, maxLength=24
→ /24 only (tight)
ROA: ASN 64500 may originate 192.0.2.0/24, maxLength=32
→ any more-specific through /32 also "valid" under that ASN
Validators classify announcements as Valid / Invalid / NotFound. Invalid should be dropped (Route Origin Validation).
Worked example
Operational checklist (docs-based; no RPKI validator installed here):
1. Inventory prefixes you originate.
2. For each, publish a ROA with ASN = your origin AS.
3. Set maxLength to the longest prefix you actually announce —
not "32 just in case".
4. After every IPv4 transfer, re-check ROAs (stale ROAs → NotFound/Invalid pain).
Example of a tight vs loose posture:
| Prefix | ASN | maxLength | Comment |
|---|---|---|---|
| 192.0.2.0/24 | 64500 | 24 | Only the /24 |
| 198.51.100.0/22 | 64500 | 24 | Allows /23–/24 you plan to announce |
| 203.0.113.0/8 | 64500 | 24 | Avoid — huge attack surface |
Trap
Copy-pasting maxLength=24 on large aggregates “for flexibility”. Attackers who can somehow announce more-specifics under your ASN (or who compromise your CA workflow) get free cover. Prefer multiple tight ROAs over one loose one.
Boring rule
ROA maxLength = maximum length you intentionally announce today. Re-issue when that policy changes. Monitor Valid/Invalid/NotFound with a relying party (routinator, rpki-client, vendor RPKI RTR).
Try this
- Look up your ASN’s ROAs on a public RPKI viewer.
- Read RFC 9319 §3 on maxLength.
- In a lab, announce a /25 covered by a /24 ROA with maxLength=24 and watch it become Invalid.
Sources
- RFC 6482 (ROA format)
- RFC 6811 (BGP Prefix Origin Validation)
- RFC 9319 (RPKI best practices — maxLength guidance)
- NRO / RIR RPKI documentation