Trong phần mềm, tràn bộ đệm ở ngăn xếp (tiếng Anh: "stack buffer overflow" hay "stack buffer overrun") xảy ra khi một chương trình viết địa chỉ bộ nhớ lên vùng gọi ngăn xếp của chương trình nhưng nằm ngoài vùng cấu trúc dữ liệu muốn nhắm tới mà thường là một bộ đệm với một độ dài thích hợp. Lỗi tràn bộ đệm của ngăn xếp bị gây ra khi một chương trình viết nhiều dữ liệu vào vùng đệm được định trên ngăn xếp hơn vùng mà bộ đệm đó được khởi tạo. Điều này sẽ làm hư hỏng dữ liệu liền kề trên ngăn xếp, trong vài trường hợp ở nơi bị tràn gây ra bởi lỗi và sẽ làm cho chương trình bị vỡ hay chạy sai. Tràn bộ đệm ngăn xếp là một dạng làm việc sai chức năng của chương trình được biết tới như tràn bộ đệm (buffer overflow). Làm đầy một bộ đệm trên ngăn xếp giống việc làm cho chương trình chạy sai hơn là làm đầy bộ nhớ trên đống (heap) vì ngăn xếp chưa nội dung của địa chỉ trả về cho tất cả các chức năng. Tràn bộ đệm ngăn xếp có thể được gây ra cố ý như là một phần của cuộc tấn công đập ngăn xếp. Nếu chương trình đang bị ảnh hưởng chạy với các đặc quyền hoặc lấy dữ liệu từ mạng máy chủ ko tin cậy (như là máy chủ web) thì lỗi là 1 lỗ hổng bảo mật tiềm ẩn. Nếu bộ đễm ngăn xếp được làm đầy bởi dữ liệu được cung cấp bởi người dùng ko tin cậy thì khi đó người đó có thể làm hỏng ngăn xếp bằng cách như là đưa mã thực thi vào chương trình đang chạy và kiểm soát quá trình. đây là cách cổ điển và lâu đời nhất và tin cậy nhất với tin tặc để truy cậy trái phép vào máy tính. Các phương pháp kinh điển cho việc khai thác một lỗi tràn bộ đệm stack cơ bản là ghi đè lên hàm trả về vị trí của con trỏ để cho kẻ tấn công kiểm soát được dữ liệu (thường là trên stack của chính nó). Điều này được minh họa trong ví dụ dưới đây: Số lượng các bậc thềm có sự khác biệt tinh vi trong cách khai báo ngăn chứa mà có thể làm ảnh hưởng đến cách khai thác hoạt động của bộ chống tràn ngăn xếp. Một vài kiến trúc máy tính lưu trữ địa chỉ trả về cấp cao của ngăn xếp trong register.Điều này có nghĩa là bất cứ địa chỉ trả về được ghi đè nào cũng sẽ không được sử dụng cho đến khi ngăn xếp sau được bung ra. Một ví dụ khác về máy chi tiết cụ thể có thể ảnh hưởng tới sự lựa chọn của khai thác kĩ thuật là một thực tế rằng hầu hết kiến trúc máy phong cách RISC(Reduced Instruction Set Computing) (Tối giản hướng dẫn cài đặt tính toán) sẽ không cho phép việc truy cập không sắp xếp tới bộ nhớ. Kết hợp với chiều dài nhất định dành cho các máy opcode, giới hạn của loại máy này có thể thực hiện 1 bước nhảy đến kĩ thuật ESP hầu như không thể khai báo (có 1 ngoại lệ xảy ra khi chương trình thực sự có chứa mã không chắc chắn để nhảy đến register của ngăn xếp một cách rõ ràng). Stack canaries, được gọi tên tương tự như chim hoàng yến trong mỏ than, nó được sử dụng nhằm phát hiện lỗi tràn bộ nhớ đệm trước khi một mã độc được thực thi. Phương pháp này hoạt động bằng cách đặt một số nguyên nhỏ trong bộ nhớ trước con trỏ trở về, giá trị được chọn ngẫu nhiên khi bắt đầu chương trình. Hầu hết các lỗi tràn bộ nhớ đệm ghi đè lên bộ nhớ có giá trị từ thấp đến cao, vì vậy trước khi ghi đè lên con trỏ trở về, giá trị canary cũng sẽ bị ghi đè. Giá trị này được kiểm tra để chắc chắn rằng nó chưa bị thay trước khi một đoạn mã sử dụng con trỏ trở về. Kỹ thuật này có thể tăng đáng kể độ khó để sử dụng lỗi tràn bộ nhớ đệm vì nó buộc người tấn công phải đoạt quyền kiểm soát con trỏ kiểm soát bằng những phương pháp không cổ điển như phá hỏng những biến quan trọng khác trên bộ nhớ đệm. Thay vì tách đoạn mã từ dữ liệu, một phương pháp nhẹ nhàng khác là ngẫu nhiên hóa vùng bộ nhớ của chương trình đang thực thi. Vì người tấn công cần phải xác định vị trí của đoạn mã có thể thực thi, ví dụ như 1 nội dung quan trọng(payload) được cung trước hay xây dựng bằng dựng lại mã ví dụ như trong ret2libc. Ngẫu nhiên hóa bố cục bộ nhớ sẽ ngăn kẻ tấn công biết được vị trí chính xác của các dòng mã, tuy nhiên việc này ko có nghĩa là sẽ ngẫu nhiên hóa tất cả. Thường thì các mã thực thi sẽ chạy tại 1 địa chỉ cố định kể cả ngẫu nhiên hóa sơ đồ không gian địa chỉ (ASLR - Address Space Layout Randomization) kết hợp với ngăn xếp bất khả thi, kẻ tấn cong vẫn có thể sử dụng vị trí cố định này. Vì thế tất cả chương trình nên được biên soạn = PIE (position-independent executables) để tất cả cái vị trí cố định này cũng dc ngẫu nhiên hóa.