T07 · Tool Hijacking and Spoofing
- Location
scripts/md2docx.py:207- Finding
LibreOffice API hijacking through an unverified LD_PRELOAD socket shim
- Content
View full analysis
#include #include #include #include #include static int (*real_socket)(int,int,int); static int (*real_socketpair)(int,int,int,int[2]); static int (*real_listen)(int,int); static int (*real_accept)(int,struct sockaddr*,socklen_t*); static int (*real_close)(int); static int (*real_read)(int,void*,size_t); static int is_shimmed[1024], peer_of[1024], wake_r[1024], wake_w[1024]; static int listener_fd=-1; __attribute__((constructor)) static void init(void){ real_socket=dlsym(RTLD_NEXT,"socket"); real_socketpair=dlsym(RTLD_NEXT,"socketpair"); real_listen=dlsym(RTLD_NEXT,"listen"); real_accept=dlsym(RTLD_NEXT,"accept"); real_close=dlsym(RTLD_NEXT,"close"); real_read=dlsym(RTLD_NEXT,"read"); for(int i=0;i<1024;i++){peer_of[i]=-1;wake_r[i]=-1;wake_w[i]=-1;} } int socket(int d,int t,int p){ if(d==AF_UNIX){int fd=real_socket(d,t,p);if(fd>=0)return fd; int sv[2];if(real_socketpair(d,t,p,sv)==0){ if(sv[0]>=0&&sv[0]<1024){is_shimmed[sv[0]]=1;peer_of[sv[0]]=sv[1]; int wp[2];if(pipe(wp)==0){wake_r[sv[0]]=wp[0];wake_w[sv[0]]=wp[1];}} return sv[0];}errno=EPERM;return -1;} return real_socket(d,t,p);} int listen(int s,int b){if(s>=0&&s<1024&&is_shimmed[s]){listener_fd=s;return 0;}return real_lis ...[truncated 4844 chars]- Remediation
View remediation
