Writing Safe Setuid Programs

List of slides

Slide 1: Writing Safe Setuid Programs
Slide 2: Theme
Slide 3: Basics of Robust Programming
Slide 4: Six Implementation Problems
Slide 5: Unstated or Implicit Assumptions
Slide 6: Validation and Verification
Slide 7: Arguments and Return Values
Slide 8: Errors
Slide 9: Morals
Slide 10: Unknown Interaction with System Components
Slide 11: User Specifying Input
Slide 12: Shell Scripts
Slide 13: Dynamic Loading and Environment
Slide 14: The Obvious Fix
Slide 15: Morals
Slide 16: Numeric or Buffer (Array) Overflows
Slide 17: Handling Arrays
Slide 18: Numeric Overflow
Slide 19: Moral
Slide 20: Altering and/or Deleting Files
Slide 21: Morals
Slide 22: Race Conditions
Slide 23: A Classic Race Condition
Slide 24: Example: Secure Temporary File
Slide 25: A Kernel Race Condition
Slide 26: Morals
Slide 27: Invoking a Subprocess
Slide 28: Environment Variables
Slide 29: Attack #1
Slide 30: Attack #2
Slide 31: Fixing This
Slide 32: Multiple Definitions
Slide 33: More Environment
Slide 34: Morals
Slide 35: Miscellaneous
Slide 36: Style and Testing
Slide 37: Memory Use
Slide 38: Seeding a PRNG
Slide 39: File Descriptors and Subprocesses
Slide 40: The Doctor Prescription