# Session Fixation GoFiber: CVE-2024-38513

> Kerentanan session fixation GoFiber memungkinkan penyerang membajak sesi pengguna melalui pengidentifikasi sesi yang telah ditentukan.

**URL:** https://www.ciptadusa.com/blog/gofiber-session-fixation-cve-2024-38513  
**Type:** blog  
**Author:** PT Cipta Dua Saudara  
**Category:** Keamanan Aplikasi  
**Published:** 2026-05-30  
**Cover:** https://www.ciptadusa.com/media/defaults/blog-cover.svg  

## Article

# Kerentanan Session Fixation GoFiber: CVE-2024-38513

## Ringkasan

Kerentanan session fixation ditemukan di GoFiber, kerangka web Go populer yang terinspirasi dari Express. Dilacak sebagai CVE-2024-38513, kerentanan ini memengaruhi GoFiber versi 2 dan lebih tinggi sebelum versi 2.52.5, sehingga memungkinkan penyerang memperbaiki pengidentifikasi sesi dan berpotensi membajak sesi pengguna.

## Detail teknis

### Deskripsi Kerentanan

Kerentanan ada di middleware sesi GoFiber, yang memungkinkan pengguna memberikan nilai ID sesi mereka sendiri. Hal ini memungkinkan penyerang membuat sesi dengan pengidentifikasi yang telah ditentukan, sehingga menyebabkan serangan session fixation.

### Root cause

Middleware sesi GoFiber tidak memvalidasi atau membuat ulang pengidentifikasi sesi dengan benar saat menerima ID sesi yang diberikan klien. Hal ini memungkinkan penyerang untuk:

1. Tetapkan ID sesi yang dikenal di browser korban
2. Tunggu hingga korban melakukan autentikasi
3. Gunakan ID sesi yang diketahui untuk mengakses sesi yang diautentikasi

### Versi yang Terkena Dampak

- GoFiber v2.x (semua versi sebelum 2.52.5)
- Aplikasi GoFiber menggunakan session middleware

### Mekanisme Serangan

```go
// Simplified attack flow
// 1. Attacker sets session cookie with known value
// Cookie: fiber_session=attacker_known_id

// 2. Victim visits site, browser sends the attacker's session ID
// 3. Victim logs in, session is now authenticated
// 4. Attacker uses the known session ID to access victim's account
```

## Eksploitasi

### Skenario Serangan

1. **Persiapan**: Penyerang mendapatkan ID sesi yang valid dari aplikasi
2. **Injeksi**: Penyerang mengelabui korban agar menggunakan ID sesi yang telah disiapkan
3. **Autentikasi**: Korban login dengan sesi yang disuntikkan
4. **Pembajakan**: Penyerang menggunakan ID sesi yang diketahui untuk menyamar sebagai korban

### Contoh Kode

```go
// Vulnerable configuration
app := fiber.New()

app.Use(session.New(session.Config{
    // No session ID validation
    KeyLookup: "cookie:session_id",
}))

// Attacker can set session_id cookie to any value
```

## Dampak

### Tingkat Keparahan: Tinggi

- **Kerahasiaan**: Tinggi - Akses ke data sesi korban
- **Integritas**: Tinggi - Melakukan tindakan sebagai korban
- **Ketersediaan**: Rendah - Potensi kelelahan sesi

### Implikasi di Dunia Nyata

- Serangan pengambilalihan akun
- Akses tidak sah ke data pengguna
- Penipuan keuangan dalam aplikasi e-commerce
- Pelanggaran privasi

## Mitigasi

### Langkah cepat

1. **Perbarui GoFiber** ke versi 2.52.5 atau lebih baru
2. **Buat kembali ID sesi** setelah autentikasi:
   ```go
   // After successful login
   sess.Regenerate()  // Generate new session ID
   sess.Set("authenticated", true)
   sess.Save()
   ```

### Konfigurasi Aman

```go
// Recommended secure configuration
app := fiber.New()

app.Use(session.New(session.Config{
    KeyLookup:      "cookie:session_id",
    CookieSecure:   true,
    CookieHTTPOnly: true,
    CookieSameSite: "Lax",
    Expiration:     time.Hour,
    // Generate new session ID on creation
    GenerateID: func() string {
        return uuid.New().String()
    },
}))
```

### Pertahanan Secara Mendalam

```go
// Custom session middleware with security checks
func SecureSessionMiddleware() fiber.Handler {
    return func(c *fiber.Ctx) error {
        sess := session.FromCtx(c)
        
        // Check if session ID is valid format
        sessionID := c.Cookies("session_id")
        if !isValidSessionID(sessionID) {
            // Generate new session
            sess.Regenerate()
        }
        
        // Check session age
        if sess.Fresh() {
            // New session, set security flags
            sess.Set("created_at", time.Now())
        }
        
        return c.Next()
    }
}

func isValidSessionID(id string) bool {
    // Validate session ID format (UUID, etc.)
    _, err := uuid.Parse(id)
    return err == nil
}
```

## Praktik Terbaik Keamanan Sesi

### Manajemen Siklus Hidup Sesi

```go
// Complete secure session handling
func LoginHandler(c *fiber.Ctx) error {
    // Validate credentials
    if !validateCredentials(c.FormValue("username"), c.FormValue("password")) {
        return c.Status(401).JSON(fiber.Map{"error": "Invalid credentials"})
    }
    
    // Get existing session
    sess := session.FromCtx(c)
    
    // Regenerate session ID to prevent fixation
    sess.Regenerate()
    
    // Set session data
    sess.Set("user_id", userID)
    sess.Set("authenticated", true)
    sess.Set("login_time", time.Now())
    sess.Set("ip", c.IP())
    
    // Save session
    if err := sess.Save(); err != nil {
        return c.Status(500).JSON(fiber.Map{"error": "Session error"})
    }
    
    return c.JSON(fiber.Map{"message": "Login successful"})
}
```

### Validasi Sesi

```go
// Middleware to validate session integrity
func ValidateSession() fiber.Handler {
    return func(c *fiber.Ctx) error {
        sess := session.FromCtx(c)
        
        // Check authentication
        if !sess.Get("authenticated").(bool) {
            return c.Status(401).JSON(fiber.Map{"error": "Unauthorized"})
        }
        
        // Validate session IP (optional)
        if sess.Get("ip").(string) != c.IP() {
            // Possible session hijacking
            sess.Destroy()
            return c.Status(401).JSON(fiber.Map{"error": "Session invalid"})
        }
        
        // Check session age
        loginTime := sess.Get("login_time").(time.Time)
        if time.Since(loginTime) > 24*time.Hour {
            sess.Destroy()
            return c.Status(401).JSON(fiber.Map{"error": "Session expired"})
        }
        
        return c.Next()
    }
}
```

## Fitur Keamanan GoFiber

### Perlindungan Bawaan

GoFiber menyediakan beberapa fitur keamanan:

```go
// CORS configuration
app.Use(cors.New(cors.Config{
    AllowOrigins:     "https://example.com",
    AllowMethods:     "GET,POST,HEAD,PUT,DELETE,PATCH",
    AllowCredentials: true,
    MaxAge:           3600,
}))

// CSRF protection
app.Use(csrf.New(csrf.Config{
    KeyLookup:      "header:X-CSRF-Token",
    CookieSecure:   true,
    CookieHTTPOnly: true,
}))

// Helmet security headers
app.Use(helmet.New())
```

## Monitoring dan Deteksi

### Indikator Kompromi

1. **Beberapa sesi dari IP yang sama**: Kemungkinan upaya session fixation
2. **Pola ID Sesi**: Pengidentifikasi sesi non-acak
3. **Pembuatan sesi cepat**: Potensi serangan kehabisan sesi

### Logging

```go
// Security logging
app.Use(func(c *fiber.Ctx) error {
    // Log session-related events
    sess := session.FromCtx(c)
    log.Printf("Session %s: %s %s from %s",
        sess.ID(),
        c.Method(),
        c.Path(),
        c.IP(),
    )
    return c.Next()
})
```

## Penutup

CVE-2024-38513 menyoroti pentingnya manajemen sesi yang tepat dalam aplikasi web. Dengan memperbarui GoFiber dan menerapkan praktik terbaik keamanan sesi, developer dapat melindungi aplikasi mereka dari serangan session fixation.

## Referensi

- [NVD - CVE-2024-38513](https://nvd.nist.gov/vuln/detail/CVE-2024-38513)
- [Dokumentasi Sesi GoFiber](https://docs.gofiber.io/middleware/session/)
- [OWASP - Session Fixation](https://owasp.org/www-community/attacks/Session_fixation)

---

*Markdown version of https://www.ciptadusa.com/blog/gofiber-session-fixation-cve-2024-38513 — generated for AI agents and LLM crawlers.*
