Open history files with a restrictive mode (user read/write only).
Do not read/write history files in '.' if $HOME is not set.

Apply by doing:
       cd /usr/src
       patch -p0 < 040_readline.patch

And rebuild binutils by doing:
       cd /usr/src/gnu/usr.bin/binutils
       make -f Makefile.bsd-wrapper obj
       make -f Makefile.bsd-wrapper depend
       make -f Makefile.bsd-wrapper
       make -f Makefile.bsd-wrapper install

Index: gnu/usr.bin/binutils/readline/history.c
===================================================================
RCS file: /cvs/src/gnu/usr.bin/binutils/readline/history.c,v
retrieving revision 1.2
diff -u -r1.2 history.c
--- gnu/usr.bin/binutils/readline/history.c     1996/11/23 03:53:32     1.2
+++ gnu/usr.bin/binutils/readline/history.c     2001/03/18 01:17:12
@@ -464,7 +464,7 @@
      home = getenv ("HOME");

      if (!home)
-       home = ".";
+       return (NULL);

      return_val = (char *)xmalloc (2 + strlen (home) + strlen (".history"));

@@ -499,8 +499,10 @@
  int file, current_line;
  struct stat finfo;

-  input = history_filename (filename);
-  file = open (input, O_RDONLY, 0666);
+  if ((input = history_filename (filename)))
+    file = open (input, O_RDONLY, 0666);
+  else
+    file = -1;

  if ((file < 0) ||
      (stat (input, &finfo) == -1))
@@ -584,7 +586,7 @@
  struct stat finfo;

  filename = history_filename (fname);
-  if (stat (filename, &finfo) == -1)
+  if (!filename || stat (filename, &finfo) == -1)
    goto truncate_exit;

  file = open (filename, O_RDONLY, 0666);
@@ -621,7 +623,7 @@
       break;
      }

-  file = open (filename, O_WRONLY | O_TRUNC | O_CREAT, 0666);
+  file = open (filename, O_WRONLY | O_TRUNC | O_CREAT, 0600);
  if (file == -1)
    goto truncate_exit;

@@ -656,7 +658,7 @@
  else
    mode = O_WRONLY | O_APPEND;

-  if ((file = open (output, mode, 0666)) == -1)
+  if (!output || (file = open (output, mode, 0600)) == -1)
    {
      if (output)
       free (output);